From: <ha...@us...> - 2015-09-06 04:09:55
|
Revision: 20757 http://sourceforge.net/p/jmol/code/20757 Author: hansonr Date: 2015-09-06 04:09:52 +0000 (Sun, 06 Sep 2015) Log Message: ----------- Jmol.___JmolVersion="14.3.16_2015.09.05" new feature: POLYHEDRA -- same as POLYHEDRA BONDS {selected} new feature: POLYHEDRA 4 -- same as POLYHEDRA 4 BONDS {selected} new feature: POLYHEDRA OFFSET 1.4 -- same as POLYHEDRA COLLAPSED faceCenterOffset 1.4 new feature: POLYHEDRA COLLAPSED 1.4 -- same as POLYHEDRA COLLAPSED faceCenterOffset 1.4 code: Polyhedra work, including more efficient algorithms for completing set of faces bug fix: tracking down thread-safe issue in application console bug fix: in Java, mouse should not lose control if moved out of application undocumented POLYHEDRA FLAT removed Modified Paths: -------------- trunk/Jmol/src/org/jmol/awt/Mouse.java trunk/Jmol/src/org/jmol/script/ScriptExpr.java trunk/Jmol/src/org/jmol/script/T.java trunk/Jmol/src/org/jmol/scriptext/CmdExt.java trunk/Jmol/src/org/jmol/shapespecial/Polyhedra.java trunk/Jmol/src/org/jmol/shapespecial/Polyhedron.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/AppConsole.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/ConsoleTextArea.java Modified: trunk/Jmol/src/org/jmol/awt/Mouse.java =================================================================== --- trunk/Jmol/src/org/jmol/awt/Mouse.java 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/jmol/awt/Mouse.java 2015-09-06 04:09:52 UTC (rev 20757) @@ -102,7 +102,7 @@ mousePressed(time, x, y, modifiers, false); break; case Event.MOUSE_DRAG: - mouseDragged(time, x, y, modifiers); + mouseDragged(time, x, y); break; case Event.MOUSE_ENTER: mouseEntered(time, x, y); @@ -157,16 +157,7 @@ @Override public void mouseDragged(MouseEvent e) { - int modifiers = e.getModifiers(); - /**************************************************************** - * Netscape 4.* Win32 has a problem with mouseDragged if you left-drag then - * none of the modifiers are selected we will try to fix that here - ****************************************************************/ - if ((modifiers & Event.BUTTON_MASK) == 0) - modifiers |= Event.MOUSE_LEFT; - - /****************************************************************/ - mouseDragged(e.getWhen(), e.getX(), e.getY(), modifiers); + mouseDragged(e.getWhen(), e.getX(), e.getY()); } @Override @@ -308,15 +299,11 @@ private void mouseEntered(long time, int x, int y) { wheeling = false; - isMouseDown = false; - modifiersDown = 0; manager.mouseEnterExit(time, x, y, false); } private void mouseExited(long time, int x, int y) { wheeling = false; - isMouseDown = false; - modifiersDown = 0; manager.mouseEnterExit(time, x, y, true); } @@ -378,7 +365,7 @@ manager.mouseAction(Event.RELEASED, time, x, y, 0, modifiers); } - private void mouseDragged(long time, int x, int y, int modifiers) { + private void mouseDragged(long time, int x, int y) { if (wheeling) return; if ((modifiersDown & Event.MAC_COMMAND) == Event.MAC_COMMAND) Modified: trunk/Jmol/src/org/jmol/script/ScriptExpr.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptExpr.java 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/jmol/script/ScriptExpr.java 2015-09-06 04:09:52 UTC (rev 20757) @@ -2342,6 +2342,7 @@ * these, because they must be integrated with the statement dynamically. * * @param st0 aaToken[i] + * @param pt0 * @return a fixed token set -- with possible overrun of unused null tokens * * @throws ScriptException Modified: trunk/Jmol/src/org/jmol/script/T.java =================================================================== --- trunk/Jmol/src/org/jmol/script/T.java 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/jmol/script/T.java 2015-09-06 04:09:52 UTC (rev 20757) @@ -1200,7 +1200,7 @@ public final static int filter = misc | 116; public final static int first = misc | 118; public final static int fixedtemp = misc | 122; - public final static int flat = misc | 124; +// public final static int flat = misc | 124; was only in Polyhedra; never documented public final static int fps = misc | 126 | expression; public final static int from = misc | 128; public final static int front = misc | 130; @@ -1209,7 +1209,7 @@ public final static int frontonly = misc | 136; public final static int full = misc | 137; public final static int fullplane = misc | 138; - public final static int fullylit = misc | 140; + public final static int fullylit = misc | 140; public final static int functionxy = misc | 142; public final static int functionxyz = misc | 144; public final static int gridpoints = misc | 146; @@ -2226,7 +2226,7 @@ "first", "fixed", "fix", - "flat", +// "flat", "fps", "from", "frontEdges", @@ -3259,7 +3259,7 @@ first, // "first" fixed, // "fixed" -1, // "fix" - flat, // "flat" +// flat, // "flat" fps, // "fps" from, // "from" frontedges, // "frontEdges" Modified: trunk/Jmol/src/org/jmol/scriptext/CmdExt.java =================================================================== --- trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-09-06 04:09:52 UTC (rev 20757) @@ -3156,6 +3156,15 @@ private boolean polyhedra() throws ScriptException { ScriptEval eval = e; + // polyhedra + // polyhedra on/off/delete + // polyhedra [type] + // where [type] is one of + // n [opt. BONDS] + // n-m [opt. BONDS] + // [opt. RADIUS] x.y + // polyhedra [type] [ + /* * needsGenerating: * @@ -3166,17 +3175,15 @@ * * polyhedra [at most one selection set] [type-and/or-edge or on/off/delete] */ - boolean needsGenerating = false; + boolean haveBonds = (slen == 1); + boolean needsGenerating = haveBonds; boolean onOffDelete = false; boolean typeSeen = false; boolean edgeParameterSeen = false; - boolean isDesignParameter = false; - int lighting = 0; + // int lighting = T.nada; // never implemented; fullyLit does nothing int nAtomSets = 0; e.sm.loadShape(JC.SHAPE_POLYHEDRA); setShapeProperty(JC.SHAPE_POLYHEDRA, "init", Boolean.TRUE); - String setPropertyName = "centers"; - String decimalPropertyName = "radius_"; float translucentLevel = Float.MAX_VALUE; int[] colorArgb = new int[] { Integer.MIN_VALUE }; for (int i = 1; i < slen; ++i) { @@ -3191,6 +3198,7 @@ case T.unitcell: propertyName = "unitCell"; propertyValue = Boolean.TRUE; + needsGenerating = true; break; case T.only: e.restrictSelected(false, false); @@ -3199,116 +3207,132 @@ case T.on: case T.delete: case T.off: - if (i + 1 != slen || needsGenerating || nAtomSets > 1 || nAtomSets == 0 - && "to".equals(setPropertyName)) + if (i + 1 != slen || needsGenerating || nAtomSets > 1) error(ScriptError.ERROR_incompatibleArguments); propertyName = (eval.theTok == T.off ? "off" : eval.theTok == T.on ? "on" : "delete"); onOffDelete = true; break; - case T.opEQ: - case T.comma: - continue; + case T.integer: + propertyName = "nVertices"; + propertyValue = Integer.valueOf(intParameter(i)); + needsGenerating = true; + switch (tokAt(i + 1)) { + // wish I had not done this. Inconsistent with general syntax; only used here + case T.opEQ: + case T.comma: + i++; + break; + } + break; case T.bonds: if (nAtomSets > 0) invPO(); needsGenerating = true; propertyName = "bonds"; + haveBonds = true; break; case T.radius: - decimalPropertyName = "radius"; - continue; - case T.integer: + i++; + //$FALL-THROUGH$ case T.decimal: - if (nAtomSets > 0 && !isDesignParameter) + if (nAtomSets > 0) invPO(); - if (eval.theTok == T.integer) { - if (decimalPropertyName == "radius_") { - propertyName = "nVertices"; - propertyValue = Integer.valueOf(intParameter(i)); - needsGenerating = true; - break; - } - } - propertyName = (decimalPropertyName == "radius_" ? "radius" - : decimalPropertyName); + propertyName = "radius"; propertyValue = Float.valueOf(floatParameter(i)); - decimalPropertyName = "radius_"; - isDesignParameter = false; needsGenerating = true; break; - case T.bitset: - case T.expressionBegin: - if (typeSeen) - invPO(); - if (++nAtomSets > 2) - eval.bad(); - if ("to".equals(setPropertyName)) - needsGenerating = true; - propertyName = setPropertyName; - setPropertyName = "to"; - propertyValue = atomExpressionAt(i); - i = eval.iToken; + case T.offset: + eval.theTok = T.facecenteroffset; + //$FALL-THROUGH$ + case T.facecenteroffset: + setShapeProperty(JC.SHAPE_POLYHEDRA, "collapsed", Boolean.TRUE); + //$FALL-THROUGH$ + case T.planarparam: + case T.distancefactor: + propertyName = T.nameOf(eval.theTok); + switch (tokAt(i + 1)) { + // wish I had not done this. Inconsistent with general syntax; only used here + case T.opEQ: + case T.comma: + i++; + break; + } + propertyValue = Float.valueOf(floatParameter(++i)); break; case T.to: if (nAtomSets > 1) invPO(); - if (tokAt(i + 1) == T.bitset || tokAt(i + 1) == T.expressionBegin + if ((tokAt(++i) == T.bitset || tokAt(i) == T.expressionBegin) && !needsGenerating) { + // select... polyhedron .... to .... propertyName = "toBitSet"; - propertyValue = atomExpressionAt(++i); - i = eval.iToken; - needsGenerating = true; + propertyValue = atomExpressionAt(i); + } else if (eval.isArrayParameter(i)) { + // select... polyhedron .... to [...] + // polyhedron {...} to [...] + propertyName = "toVertices"; + propertyValue = eval.getPointArray(i, -1, false); + } else { + error(ScriptError.ERROR_insufficientArguments); + } + i = eval.iToken; + needsGenerating = true; + break; + case T.bitset: + case T.expressionBegin: + if (typeSeen) + invPO(); + switch (++nAtomSets) { + case 1: + propertyName = "centers"; break; - } else if (eval.isArrayParameter(i + 1)) { - propertyName = "toVertices"; - propertyValue = eval.getPointArray(i + 1, -1, false); - i = eval.iToken; + case 2: + propertyName = "to"; needsGenerating = true; break; - } else if (!needsGenerating) { - error(ScriptError.ERROR_insufficientArguments); + default: + eval.bad(); } - setPropertyName = "to"; - continue; - case T.facecenteroffset: - case T.planarparam: - case T.distancefactor: -// if (nAtomSets == 0) -// error(ScriptError.ERROR_insufficientArguments); - decimalPropertyName = T.nameOf(eval.theTok); - isDesignParameter = true; - continue; + propertyValue = atomExpressionAt(i); + i = eval.iToken; + if (i + 1 == slen) + needsGenerating = true; + break; case T.color: case T.translucent: case T.opaque: translucentLevel = getColorTrans(eval, i, true, colorArgb); i = eval.iToken; continue; + // case T.flat: // removed in Jmol 14.4 -- never documented case T.collapsed: - case T.flat: - propertyName = "collapsed"; - propertyValue = (eval.theTok == T.collapsed ? Boolean.TRUE - : Boolean.FALSE); + // COLLAPSED + // COLLAPSED [faceCenterOffset] if (typeSeen) error(ScriptError.ERROR_incompatibleArguments); typeSeen = true; + if (isFloatParameter(i + 1)) + setShapeProperty(JC.SHAPE_POLYHEDRA, "faceCenterOffset", + Float.valueOf(floatParameter(++i))); + propertyName = "collapsed"; + propertyValue = Boolean.TRUE; break; - case T.triangles: - case T.notriangles: - propertyName = "token"; - propertyValue = Integer.valueOf(e.theTok); - break; case T.noedges: case T.edges: case T.frontedges: if (edgeParameterSeen) error(ScriptError.ERROR_incompatibleArguments); - propertyName = paramAsStr(i); edgeParameterSeen = true; + propertyName = T.nameOf(eval.iToken); break; + case T.triangles: + case T.notriangles: + case T.backlit: + case T.frontlit: case T.fullylit: - lighting = eval.theTok; + // never implemented or + // lighting = eval.theTok; continue; default: if (eval.isColorParam(i)) { @@ -3322,18 +3346,21 @@ if (onOffDelete) return false; } - if (!needsGenerating && !typeSeen && !edgeParameterSeen && lighting == 0) + if (needsGenerating) { + if (!typeSeen && haveBonds) + setShapeProperty(JC.SHAPE_POLYHEDRA, "bonds", null); + setShapeProperty(JC.SHAPE_POLYHEDRA, "generate", null); + } else if (!edgeParameterSeen) {// && lighting == T.nada) error(ScriptError.ERROR_insufficientArguments); - if (needsGenerating) - setShapeProperty(JC.SHAPE_POLYHEDRA, "generate", null); + } if (colorArgb[0] != Integer.MIN_VALUE) setShapeProperty(JC.SHAPE_POLYHEDRA, "colorThis", Integer.valueOf(colorArgb[0])); if (translucentLevel != Float.MAX_VALUE) eval.setShapeTranslucency(JC.SHAPE_POLYHEDRA, "", "translucentThis", translucentLevel, null); - if (lighting != 0) - setShapeProperty(JC.SHAPE_POLYHEDRA, "token", Integer.valueOf(lighting)); + // if (lighting != T.nada) + // setShapeProperty(JC.SHAPE_POLYHEDRA, "token", Integer.valueOf(lighting)); setShapeProperty(JC.SHAPE_POLYHEDRA, "init", Boolean.FALSE); return true; } Modified: trunk/Jmol/src/org/jmol/shapespecial/Polyhedra.java =================================================================== --- trunk/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2015-09-06 04:09:52 UTC (rev 20757) @@ -56,16 +56,15 @@ public class Polyhedra extends AtomShape { private final static float DEFAULT_DISTANCE_FACTOR = 1.85f; - // private final static float DEFAULT_MANY_VERTEX_DISTANCE_FACTOR = 1.5f; private final static float DEFAULT_FACECENTEROFFSET = 0.25f; private final static int EDGES_NONE = 0; public final static int EDGES_ALL = 1; public final static int EDGES_FRONT = 2; private final static int MAX_VERTICES = 250; private final static int FACE_COUNT_MAX = MAX_VERTICES - 3; - private P3[] otherAtoms = new P3[MAX_VERTICES + 1]; + private P3[] otherAtoms = new P3[MAX_VERTICES + FACE_COUNT_MAX + 1]; private V3[] normalsT = new V3[MAX_VERTICES + 1]; - private int[][] planesT = new int[MAX_VERTICES][3]; + private int[][] planesT = AU.newInt2(MAX_VERTICES); private final static P3 randomPoint = P3.new3(3141f, 2718f, 1414f); private static final int MODE_BONDING = 1; @@ -103,7 +102,6 @@ private float planarParam; private Map<String, SV> info; private float distanceRef; - private int nBondsRef; @SuppressWarnings("unchecked") @Override @@ -179,7 +177,7 @@ if ("toVertices" == propertyName) { P3[] points = (P3[]) value; - nPoints = points.length; + nPoints = Math.min(points.length, MAX_VERTICES); for (int i = nPoints; --i >= 0;) otherAtoms[i] = points[i]; return; @@ -271,14 +269,15 @@ //allow super } - if ("token" == propertyName) { - int tok = ((Integer) value).intValue(); - if (tok == T.triangles && tok == T.notriangles) { - } else { - setLighting(tok == T.fullylit, bs); - } - return; - } +// if ("token" == propertyName) { +// int tok = ((Integer) value).intValue(); +// Swit +// if (tok == T.triangles && tok == T.notriangles) { +// } else { +// setLighting(tok == T.fullylit, bs); +// } +// return; +// } if ("radius" == propertyName) { radius = ((Float) value).floatValue(); @@ -289,11 +288,10 @@ int modelIndex = ((int[]) ((Object[]) value)[2])[0]; for (int i = polyhedronCount; --i >= 0;) { polyhedrons[i].info = null; - if (polyhedrons[i].modelIndex == modelIndex) { + int mi = polyhedrons[i].centralAtom.mi; + if (mi == modelIndex) { polyhedronCount--; polyhedrons = (Polyhedron[]) AU.deleteElements(polyhedrons, i, 1); - } else if (polyhedrons[i].modelIndex > modelIndex) { - polyhedrons[i].modelIndex--; } } //pass on to AtomShape @@ -310,9 +308,9 @@ s += polyhedrons[i].getSymmetry(vwr, true) + "\n"; return s; } - return null; + return null; } - + @Override public boolean getPropertyData(String property, Object[] data) { int iatom; @@ -329,8 +327,10 @@ return false; } if (property == "move") { + M4 mat = (M4) data[1]; + if (mat == null) + return false; BS bs = (BS) data[0]; - M4 mat = (M4) data[1]; for (int i = polyhedronCount; --i >= 0;) { Polyhedron p = polyhedrons[i]; if (bs.get(p.centralAtom.i)) @@ -391,17 +391,17 @@ return lst; } - private void setLighting(boolean isFullyLit, BS bs) { - for (int i = polyhedronCount; --i >= 0;) - if (bs.get(polyhedrons[i].centralAtom.i)) { - short[] normixes = polyhedrons[i].getNormixes(); - polyhedrons[i].isFullyLit = isFullyLit; - for (int j = normixes.length; --j >= 0;) { - if (normixes[j] < 0 != isFullyLit) - normixes[j] = (short) ~normixes[j]; - } - } - } +// private void setLighting(boolean isFullyLit, BS bs) { +// for (int i = polyhedronCount; --i >= 0;) +// if (bs.get(polyhedrons[i].centralAtom.i)) { +// short[] normixes = polyhedrons[i].getNormixes(); +// polyhedrons[i].isFullyLit = isFullyLit; +// for (int j = normixes.length; --j >= 0;) { +// if (normixes[j] < 0 != isFullyLit) +// normixes[j] = (short) ~normixes[j]; +// } +// } +// } private BS andBitSet(BS bs) { BS bsCenters = new BS(); @@ -435,17 +435,19 @@ } } + private int buildMode; + private void buildPolyhedra() { boolean useBondAlgorithm = radius == 0 || bondedOnly; - int mode = (info != null ? MODE_INFO : nPoints > 0 ? MODE_POINTS + buildMode = (info != null ? MODE_INFO : nPoints > 0 ? MODE_POINTS : haveBitSetVertices ? MODE_BITSET : useUnitCell ? MODE_UNITCELL : useBondAlgorithm ? MODE_BONDING : MODE_ITERATE); - AtomIndexIterator iter = (mode == MODE_ITERATE ? ms + AtomIndexIterator iter = (buildMode == MODE_ITERATE ? ms .getSelectedAtomIterator(null, false, false, false, false) : null); for (int i = centers.nextSetBit(0); i >= 0; i = centers.nextSetBit(i + 1)) { Atom atom = atoms[i]; Polyhedron p = null; - switch (mode) { + switch (buildMode) { case MODE_BITSET: bsVertices.clear(i); p = constructBitSetPolyhedron(atom); @@ -529,7 +531,7 @@ if (!bond.isCovalent()) continue; Atom other = bond.getOtherAtom(atom); - if (bsVertices != null && !bsVertices.get(i) || radius > 0 + if (bsVertices != null && !bsVertices.get(other.i) || radius > 0 && other.distance(atom) > radius) continue; otherAtoms[bondCount++] = other; @@ -537,7 +539,6 @@ break; } } - nBondsRef = bondCount; distanceRef = 0; return (bondCount < 3 || bondCount >= MAX_VERTICES || nVertices > 0 && !bsVertexCount.get(bondCount) ? null : validatePolyhedron(atom, @@ -546,7 +547,6 @@ private Polyhedron constructBitSetPolyhedron(Atom atom) { int otherAtomCount = 0; - nBondsRef = bsVertices.cardinality(); distanceRef = 0; for (int i = bsVertices.nextSetBit(0); i >= 0; i = bsVertices .nextSetBit(i + 1)) @@ -556,12 +556,12 @@ private Polyhedron constructRadiusPolyhedron(Atom atom, AtomIndexIterator iter) { int otherAtomCount = 0; - nBondsRef = 0; distanceRef = radius; while (iter.hasNext()) { Atom other = atoms[iter.next()]; P3 pt = iter.getPosition(); if (pt == null) { + // this will happen with standard radius atom iterator pt = other; if (bsVertices != null && !bsVertices.get(other.i) || atom.distance(pt) > radius) @@ -579,62 +579,64 @@ } private Polyhedron validatePolyhedron(Atom centralAtom, int vertexCount, - P3[] otherAtoms) { + P3[] points) { + boolean collapsed = isCollapsed; + boolean checkDist = (distanceRef != 0); int planeCount = 0; - int iCenter = vertexCount; - int nPoints = iCenter + 1; - float distMax = 0; - float dAverage = 0; + int nPoints = vertexCount + 1; + int ni = vertexCount - 2; + int nj = vertexCount - 1; float planarParam = (Float.isNaN(this.planarParam) ? DEFAULT_PLANAR_PARAM : this.planarParam); - P3[] points = new P3[MAX_VERTICES * 3]; - points[iCenter] = otherAtoms[iCenter] = centralAtom; - for (int i = 0; i < iCenter; i++) { - points[i] = otherAtoms[i]; - dAverage += points[iCenter].distance(points[i]); - } - dAverage = dAverage / iCenter; - boolean isOK = (dAverage == 0); - int nRef = iCenter; - int nother1 = iCenter - 1; - int nother2 = iCenter - 2; float factor = (!Float.isNaN(distanceFactor) ? distanceFactor : DEFAULT_DISTANCE_FACTOR); - BS bs = BS.newN(iCenter); + BS bs = BS.newN(vertexCount); // here we are assuring that at least ONE face is drawn to - // all matching vertices + // all matching vertices -- skip this for BOND polyhedra - while (!isOK && factor < 10.0f) { - distMax = dAverage * factor; - bs.setBits(0, iCenter); - for (int i = 0; i < nother2; i++) - for (int j = i + 1; j < nother1; j++) { - if (points[i].distance(points[j]) > distMax) - continue; - for (int k = j + 1; k < iCenter; k++) { - if (points[i].distance(points[k]) > distMax - || points[j].distance(points[k]) > distMax) + points[vertexCount] = centralAtom; + P3 ptAve = new P3(); + for (int i = 0; i < vertexCount; i++) + ptAve.add(points[i]); + ptAve.scale(1f / vertexCount); + float distMax = 0; + if (checkDist) { + float dAverage = 0; + for (int i = 0; i < vertexCount; i++) + dAverage += points[vertexCount].distance(points[i]); + dAverage /= vertexCount; + boolean isOK = (dAverage == 0); + while (!isOK && factor < 10.0f) { + distMax = dAverage * factor; + bs.setBits(0, vertexCount); + for (int i = 0; i < ni; i++) + for (int j = i + 1; j < nj; j++) { + if (points[i].distance(points[j]) > distMax) continue; - bs.clear(i); - bs.clear(j); - bs.clear(k); + for (int k = j + 1; k < vertexCount; k++) { + if (points[i].distance(points[k]) > distMax + || points[j].distance(points[k]) > distMax) + continue; + bs.clear(i); + bs.clear(j); + bs.clear(k); + } } - } - isOK = true; - for (int i = 0; i < iCenter; i++) - if (bs.get(i)) { - isOK = false; - factor *= 1.05f; - if (Logger.debugging) { - Logger.debug("Polyhedra distanceFactor for " + iCenter - + " atoms increased to " + factor + " in order to include " - + otherAtoms[i]); + isOK = true; + for (int i = 0; i < vertexCount; i++) + if (bs.get(i)) { + isOK = false; + factor *= 1.05f; + if (Logger.debugging) { + Logger.debug("Polyhedra distanceFactor for " + vertexCount + + " atoms increased to " + factor + " in order to include " + + points[i]); + } + break; } - break; - } + } } - /* Start by defining a face to be when all three distances * are < distanceFactor * (longest central) but if a vertex is missed, * then expand the range. The collapsed trick is to introduce @@ -652,53 +654,40 @@ * For these special cases, then, we define a reference point just behind the plane */ - // produce face-centered catalog and facet-aligned catalog - String facesThroughCenter = ""; - String ignoreFlat = ""; - P3 ptRef = P3.newP(points[iCenter]); - for (int i = 0; i < nother2; i++) - for (int j = i + 1; j < nother1; j++) - for (int k = j + 1; k < iCenter; k++) { - if (isPlanar(points[i], points[j], points[k], ptRef)) { - facesThroughCenter += faceId(i, j, k); - if (isAligned(points[i], points[j], ptRef)) - ignoreFlat += faceId(i, j, -1); - if (isAligned(points[j], points[k], ptRef)) - ignoreFlat += faceId(j, k, -1); - if (isAligned(points[i], points[k], ptRef)) - ignoreFlat += faceId(i, k, -1); - } - } - ptRef = new P3(); + P3 ptRef = P3.newP(ptAve); + BS bsThroughCenter = new BS(); + for (int pt = 0, i = 0; i < ni; i++) + for (int j = i + 1; j < nj; j++) + for (int k = j + 1; k < vertexCount; k++, pt++) + if (isPlanar(points[i], points[j], points[k], ptRef)) + bsThroughCenter.set(pt); // this next check for distance allows for bond AND distance constraints - int[][] p = planesT; + int[][] faces = planesT; P4 pTemp = new P4(); V3 nTemp = new V3(); float offset = faceCenterOffset; int fmax = FACE_COUNT_MAX; int vmax = MAX_VERTICES; - P3 rpt = randomPoint; BS bsTemp = Normix.newVertexBitSet(); BS bsTemp1 = new BS(); V3[] normals = normalsT; Map<Object, Object> htNormMap = new Hashtable<Object, Object>(); - BS bsFlat = new BS(); - String facet; + BS bsCenterPlanes = new BS(); V3 vTemp = vAC; - boolean isComplex = (iCenter >= 5); - boolean doAllowFlat = !isComplex && !useUnitCell; - boolean collapsed = isCollapsed; - for (int i = 0; i < nother2; i++) - for (int j = i + 1; j < nother1; j++) { - if (points[i].distance(points[j]) > distMax) + for (int i = 0, pt = 0; i < ni; i++) + for (int j = i + 1; j < nj; j++) { + if (checkDist && points[i].distance(points[j]) > distMax) { + pt += vertexCount - j - 1; continue; - for (int k = j + 1; k < iCenter; k++) { - if (points[i].distance(points[k]) > distMax - || points[j].distance(points[k]) > distMax) + } + for (int k = j + 1; k < vertexCount; k++, pt++) { + if (checkDist + && (points[i].distance(points[k]) > distMax || points[j] + .distance(points[k]) > distMax)) continue; if (planeCount >= fmax) { Logger.error("Polyhedron error: maximum face(" + fmax - + ") -- reduce RADIUS or DISTANCEFACTOR"); + + ") -- reduce RADIUS"); return null; } if (nPoints >= vmax) { @@ -706,108 +695,76 @@ + ") -- reduce RADIUS"); return null; } - boolean isFlat = (facesThroughCenter.indexOf(faceId(i, j, k)) >= 0); - if (isFlat && !doAllowFlat) + boolean isThroughCenter = bsThroughCenter.get(pt); + P3 rpt = (isThroughCenter ? randomPoint : ptAve); + V3 normal = new V3(); + boolean isWindingOK = getNormalFromCenter(rpt, points[i], points[j], + points[k], !isThroughCenter, normal); + // the standard face: + normals[planeCount] = normal; + faces[planeCount] = new int[] { isWindingOK ? i : j, isWindingOK ? j : i, + k, -7 }; + if (!checkFace(points, vertexCount, faces, normals, planeCount, pTemp, nTemp, + vTemp, htNormMap, planarParam, bsTemp, bsTemp1)) continue; - // if center is on the face, then we need an arbitrary reference point to - // define the normal - boolean isSpecial = collapsed; - V3 normal = new V3(); - boolean isWindingOK; - if (isFlat) { - isWindingOK = getNormalFromCenter(rpt, points[i], points[j], - points[k], false, normal); + if (isThroughCenter) { + bsCenterPlanes.set(planeCount++); + } else if (collapsed) { + ptRef.setT(points[nPoints] = new P3()); + points[nPoints].scaleAdd2(offset, normal, centralAtom); + addFacet(i, j, k, ptRef, points, normals, faces, planeCount++, nPoints, + isWindingOK); + addFacet(k, i, j, ptRef, points, normals, faces, planeCount++, nPoints, + isWindingOK); + addFacet(j, k, i, ptRef, points, normals, faces, planeCount++, nPoints, + isWindingOK); + nPoints++; } else { - isWindingOK = getNormalFromCenter(points[iCenter], points[i], - points[j], points[k], true, normal); - // the standard face: - p[planeCount] = new int[] { isWindingOK ? i : j, - isWindingOK ? j : i, k, -7 }; - normals[planeCount] = normal; - if (isComplex - && !checkFace(points, iCenter, p, normals, planeCount, pTemp, - nTemp, vTemp, htNormMap, planarParam, bsTemp, bsTemp1)) - continue; -// System.out.println("draw ID \"d" + faceId(i, j, k) + "\" VECTOR " -// + ptRef + " " + normal + "\">" + faceId(i, j, k) + isWindingOK -// + "\""); - } - if (!isFlat && !isSpecial) { planeCount++; - continue; } - if (isFlat) { - ptRef.sub2(points[iCenter], normal); - nRef = iCenter; - } else { - nRef = nPoints; - otherAtoms[nPoints] = points[nPoints] = new P3(); - points[nPoints++].scaleAdd2(offset, normal, points[iCenter]); - } - // facet i j k - if (!collapsed) { - facet = faceId(i, j, -1); - isSpecial = (ignoreFlat.indexOf(facet) < 0); - if (isSpecial) { - ignoreFlat += facet; - bsFlat.set(planeCount); - } - } - if (isSpecial) { - p[planeCount] = new int[] { isWindingOK ? i : j, - isWindingOK ? j : i, nRef, isFlat ? -15 : -6 }; - getNormalFromCenter(points[k], points[i], points[j], ptRef, false, - normal); - normals[planeCount++] = normal; - } - // facet i k j - if (!collapsed) { - facet = faceId(i, k, -1); - isSpecial = (ignoreFlat.indexOf(facet) < 0); - if (isSpecial) { - ignoreFlat += facet; - bsFlat.set(planeCount); - } - } - if (isSpecial) { - p[planeCount] = new int[] { isWindingOK ? i : k, nRef, - isWindingOK ? k : i, isFlat ? -15 : -5 }; - getNormalFromCenter(points[j], points[i], ptRef, points[k], false, - normal); - normals[planeCount++] = normal; - } - // face j k i - if (!collapsed) { - facet = faceId(j, k, -1); - isSpecial = (ignoreFlat.indexOf(facet) < 0); - if (isSpecial) { - ignoreFlat += facet; - bsFlat.set(planeCount); - } - } - if (isSpecial) { - p[planeCount] = new int[] { nRef, isWindingOK ? j : k, - isWindingOK ? k : j, isFlat ? -15 : -4 }; - getNormalFromCenter(points[i], ptRef, points[j], points[k], false, - normal); - normals[planeCount++] = normal; - } } } nPoints--; - if (Logger.debugging) { Logger .info("Polyhedron planeCount=" + planeCount + " nPoints=" + nPoints); for (int i = 0; i < planeCount; i++) - Logger.info("Polyhedron " + getKey(p[i], i)); + Logger.info("Polyhedron " + PT.toJSON("face[" +i + "]", faces[i])); } - return new Polyhedron().set(centralAtom, iCenter, nPoints, planeCount, - otherAtoms, normals, bsFlat, p, collapsed, distanceRef); + return new Polyhedron().set(centralAtom, points, nPoints, vertexCount, + faces, planeCount, normals, bsCenterPlanes, collapsed, distanceRef); } /** + * Add one of the three "facets" that compose the planes of a "collapsed" polyhedron. + * A mask of -2 ensures that only the [1-2] edge is marked as an outer edge. * + * @param i + * @param j + * @param k + * @param ptRef slightly out from the center; based on centerOffset parameter + * @param points + * @param normals + * @param faces + * @param planeCount + * @param nRef + * @param isWindingOK + */ + private void addFacet(int i, int j, int k, P3 ptRef, P3[] points, + V3[] normals, int[][] faces, int planeCount, int nRef, + boolean isWindingOK) { + V3 normal = new V3(); + getNormalFromCenter(points[k], ptRef, points[i], points[j], false, normal); + normals[planeCount] = normal; + faces[planeCount] = new int[] { nRef, isWindingOK ? i : j, isWindingOK ? j : i, + -2 }; + // System.out.println("draw ID \"d" + faceId(i, j, k) + "\" VECTOR " + // + ptRef + " " + normal + " color blue \">" + faceId(i, j, k) + isWindingOK + // + "\""); + } + + /** + * * @param ptCenter * @param ptA * @param ptB @@ -828,43 +785,38 @@ } /** - * Clean out oeverlapping triangles based on normals and cross products. - * For now, we use normixes, which are approximations of normals. - * It is not 100% guaranteed that this will work. + * Clean out overlapping triangles based on normals and cross products. For + * now, we use normixes, which are approximations of normals. It is not 100% + * guaranteed that this will work. * * @param points - * @param ptCenter + * @param nPoints * @param planes * @param normals * @param index * @param pTemp * @param vNorm + * @param vTemp * @param htNormMap * @param planarParam * @param bsTemp + * @param bsPts * @return true if valid */ - private boolean checkFace(P3[] points, int ptCenter, int[][] planes, - V3[] normals, int index, P4 pTemp, V3 vNorm, V3 vTemp, - Map<Object, Object> htNormMap, float planarParam, - BS bsTemp, BS bsPts) { + private boolean checkFace(P3[] points, int nPoints, int[][] planes, + V3[] normals, int index, P4 pTemp, V3 vNorm, + V3 vTemp, Map<Object, Object> htNormMap, + float planarParam, BS bsTemp, BS bsPts) { int[] p1 = planes[index]; // Check here for a 3D convex hull: pTemp = Measure.getPlaneThroughPoints(points[p1[0]], points[p1[1]], points[p1[2]], vNorm, vTemp, pTemp); - // P3 ptest = P3.newP(points[p1[0]]); - // ptest.add(points[p1[1]]); - // ptest.add(points[p1[2]]); - // ptest.scale(1/3f); - // System.out.println("$draw ID p" + index +" vector " + ptest + vNorm); - // See if all vertices are OUTSIDE the the plane we are considering. - for (int j = 0; j < ptCenter; j++) { + for (int j = 0; j < nPoints; j++) { vTemp.sub2(points[p1[0]], points[j]); float v = vTemp.dot(vNorm); - if (v < -0.1) { - //System.out.println("$draw ID p" + index + "_" + j + points[j]); + if (v < -0.15) { return false; } } @@ -877,14 +829,14 @@ for (Entry<Object, Object> e : htNormMap.entrySet()) { Object ikey = e.getKey(); if (ikey instanceof Integer) { - Integer n = (Integer)ikey; + Integer n = (Integer) ikey; if (norms[n.intValue()].dot(norm) > planarParam) { normix = n; break; } } } - htNormMap.put(normix, Boolean.TRUE); + htNormMap.put(normix, Boolean.TRUE); } bsPts.clearAll(); for (int i = 0; i < 3; i++) @@ -894,13 +846,13 @@ } /** - * Check each edge to see that + * Check each edge to see that * * (a) it has not been used before * * (b) it does not have vertex points on both sides of it * - * (c) if it runs opposite another edge, then both edge masks are set properly + * (c) if it runs opposite another edge, then both edge masks are set properly * * @param htNormMap * @param normix @@ -921,7 +873,6 @@ String edge = normix + s + s1; if (htNormMap.containsKey(edge)) return false; -// System.out.println(edge); //reverse maps are in String edge0 = normix + s1 + s; Object o = htNormMap.get(edge0); @@ -956,36 +907,11 @@ return true; } - private String getKey(int[] p1, int index) { - SB sb = new SB(); - for (int i = 0, n = p1.length; i < n; i++) - if (p1[i] >= 0) - sb.append("_").appendI(p1[i]); - sb.append("_").appendI(p1[0]); - sb.append("_,").appendI(index).append(";"); - return sb.toString(); - } - - private String faceId(int i, int j, int k) { - return "[" + i + "," + j + "," + k + "]"; - } - - private V3 align1 = new V3(); - private V3 align2 = new V3(); - - private boolean isAligned(P3 pt1, P3 pt2, P3 pt3) { - align1.sub2(pt1, pt3); - align2.sub2(pt2, pt3); - float angle = align1.angle(align2); - return (angle < 0.01f || angle > 3.13f); - } - private final V3 vAB = new V3(); private final V3 vAC = new V3(); private final V3 vBC = new V3(); - - private static float minDistanceForPlanarity = 0.1f; + private static float MAX_DISTANCE_TO_PLANE = 0.1f; private boolean isPlanar(P3 pt1, P3 pt2, P3 pt3, P3 ptX) { /* @@ -997,7 +923,7 @@ V3 norm = new V3(); float w = Measure.getNormalThroughPoints(pt1, pt2, pt3, norm, vAB); float d = Measure.distanceToPlaneV(norm, w, ptX); - return (Math.abs(d) < minDistanceForPlanarity); + return (Math.abs(d) < MAX_DISTANCE_TO_PLANE); } @Override @@ -1011,7 +937,7 @@ Polyhedron p = polyhedrons[i]; if (ms.at[p.centralAtom.i].isDeleted()) p.isValid = false; - p.visibilityFlags = (p.visible && bsModels.get(p.modelIndex) + p.visibilityFlags = (p.visible && bsModels.get(p.centralAtom.mi) && !ms.isAtomHidden(p.centralAtom.i) && !ms.at[p.centralAtom.i].isDeleted() ? vf : 0); if (p.visibilityFlags != 0) Modified: trunk/Jmol/src/org/jmol/shapespecial/Polyhedron.java =================================================================== --- trunk/Jmol/src/org/jmol/shapespecial/Polyhedron.java 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/jmol/shapespecial/Polyhedron.java 2015-09-06 04:09:52 UTC (rev 20757) @@ -26,16 +26,16 @@ public class Polyhedron { - int modelIndex; public Atom centralAtom; public P3[] vertices; public int[][] faces; int nVertices; - boolean collapsed = false; + boolean collapsed; private BS bsFlat; - + private float distanceRef; private V3[] normals; private short[] normixes; + public String smiles, smarts, stereoSmiles; private SymmetryInterface pointGroup; private Float volume; @@ -45,24 +45,22 @@ public boolean isValid = true; public short colixEdge = C.INHERIT_ALL; public int visibilityFlags = 0; - private float distanceRef; Polyhedron() { } - Polyhedron set(Atom centralAtom, int nVertices, int nPoints, int planeCount, - P3[] otherAtoms, V3[] normals, BS bsFlat, int[][] planes, boolean collapsed, float distanceRef) { + Polyhedron set(Atom centralAtom, P3[] points, int nPoints, int vertexCount, + int[][] planes, int planeCount, V3[] normals, BS bsFlat, boolean collapsed, float distanceRef) { this.distanceRef = distanceRef; this.centralAtom = centralAtom; - modelIndex = centralAtom.mi; - this.nVertices = nVertices; + this.nVertices = vertexCount; this.vertices = new P3[nPoints + 1]; this.normals = new V3[planeCount]; this.bsFlat = bsFlat; this.faces = AU.newInt2(planeCount); for (int i = nPoints + 1; --i >= 0;) // includes central atom as last atom or possibly reference point - vertices[i] = otherAtoms[i]; + vertices[i] = points[i]; for (int i = planeCount; --i >= 0;) this.normals[i] = V3.newV(normals[i]); for (int i = planeCount; --i >= 0;) @@ -85,7 +83,6 @@ info.put("atomNumber", Integer.valueOf(centralAtom.getAtomNumber())); info.put("atomName", centralAtom.getInfo()); info.put("element", centralAtom.getElementSymbol()); - info.put("vertexCount", Integer.valueOf(nVertices)); info.put("faceCount", Integer.valueOf(faces.length)); info.put("volume", getVolume()); if (smarts != null) @@ -103,10 +100,15 @@ info.put("bsFlat", bsFlat); if (collapsed) info.put("collapsed", Boolean.valueOf(collapsed)); - info.put("ptRef", vertices[nVertices]); + info.put("distanceRef", Float.valueOf(distanceRef)); } + info.put("vertexCount", Integer.valueOf(nVertices)); info.put("atomIndex", Integer.valueOf(centralAtom.i)); - info.put("vertices", AU.arrayCopyPt(vertices, nVertices)); + info.put("vertices", AU.arrayCopyPt(vertices, (isAll ? nVertices : vertices.length))); + P3[] n = new P3[normals.length]; + for (int i = n.length; --i >= 0;) + n[i] = P3.newP(normals[i]); + info.put("normals", n); info.put("faces", AU.arrayCopyII(faces, faces.length)); int[] elemNos = new int[nVertices]; for (int i = 0; i < nVertices; i++) { @@ -120,12 +122,25 @@ Polyhedron setInfo(Map<String, SV> info, Atom[] at) { try { + collapsed = info.containsKey("collapsed"); centralAtom = at[info.get("atomIndex").intValue]; - modelIndex = centralAtom.mi; Lst<SV> lst = info.get("vertices").getList(); - vertices = new P3[lst.size() + 1]; - nVertices = vertices.length - 1; - for (int i = nVertices; --i >= 0;) + SV vc = info.get("vertexCount"); + if (vc == null) { + // old style + nVertices = lst.size(); + vertices = new P3[nVertices + 1]; + vertices[nVertices] = SV.ptValue(info.get("ptRef")); + } else { + nVertices = vc.intValue; + vertices = new P3[lst.size()]; + vc = info.get("distanceRef"); + if (vc != null) + distanceRef = vc.asFloat(); + } + // note that nVertices will be smaller than lst.size() + // because lst will contain the central atom and any collapsed points + for (int i = lst.size(); --i >= 0;) vertices[i] = SV.ptValue(lst.get(i)); lst = info.get("elemNos").getList(); for (int i = nVertices; --i >= 0;) { @@ -137,7 +152,6 @@ vertices[i] = p; } } - vertices[nVertices] = SV.ptValue(info.get("ptRef")); lst = info.get("faces").getList(); faces = AU.newInt2(lst.size()); normals = new V3[faces.length]; @@ -153,7 +167,6 @@ vertices[a[2]], normals[i], vAB); } bsFlat = SV.getBitSet(info.get("bsFlat"), false); - collapsed = info.containsKey("collapsed"); } catch (Exception e) { return null; } @@ -194,13 +207,14 @@ V3 vAC = new V3(); V3 vTemp = new V3(); float v = 0; - for (int i = faces.length; --i >= 0;) { - int[] face = faces[i]; - for (int j = face.length - 2; --j >= 0;) - if (face[j + 2] >= 0) - v += triangleVolume(face[j], face[j + 1], face[j + 2], vAB, vAC, - vTemp); - } + if (bsFlat.cardinality() < faces.length) + for (int i = faces.length; --i >= 0;) { + int[] face = faces[i]; + for (int j = face.length - 2; --j >= 0;) + if (face[j + 2] >= 0) + v += triangleVolume(face[j], face[j + 1], face[j + 2], vAB, vAC, + vTemp); + } return Float.valueOf(v / 6); } @@ -214,7 +228,7 @@ } String getState(Viewer vwr) { - return " var p = " + Escape.e(getInfo(vwr, false)) + ";polyhedron @p" + return "polyhedron @" + Escape.e(getInfo(vwr, false)) + (isFullyLit ? " fullyLit" : "") + ";" + (visible ? "" : "polyhedra ({"+centralAtom.i+"}) off;") + "\n"; } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-09-06 04:09:52 UTC (rev 20757) @@ -59,8 +59,24 @@ TODO: image off stops JSmol TODO: Rolf's errors in Safari due to move + zoomto -Jmol.___JmolVersion="14.3.16_2015.09.04" +Jmol.___JmolVersion="14.3.16_2015.09.05" +new feature: POLYHEDRA + -- same as POLYHEDRA BONDS {selected} +new feature: POLYHEDRA 4 + -- same as POLYHEDRA 4 BONDS {selected} +new feature: POLYHEDRA OFFSET 1.4 + -- same as POLYHEDRA COLLAPSED faceCenterOffset 1.4 +new feature: POLYHEDRA COLLAPSED 1.4 + -- same as POLYHEDRA COLLAPSED faceCenterOffset 1.4 + +code: Polyhedra work, including more efficient algorithms for completing set of faces + +bug fix: tracking down thread-safe issue in application console +bug fix: in Java, mouse should not lose control if moved out of application + +JmolVersion="14.3.16_2015.09.04" + bug fix: Mac OS does not add modifiers (left, right, ctrl, etc.) to drag operations Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/AppConsole.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/AppConsole.java 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/AppConsole.java 2015-09-06 04:09:52 UTC (rev 20757) @@ -28,6 +28,7 @@ import java.awt.Component; import java.awt.Container; import java.awt.Dimension; +import java.awt.EventQueue; import java.awt.Font; import java.awt.Rectangle; import java.awt.Window; @@ -777,7 +778,16 @@ : 1) : vwr.getSetHistory(up ? -1 : 1)); if (cmd == null) { - hBar.setValue(0); + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + try { + hBar.setValue(0); + } catch (Throwable e) { + // + } + } + }); return; } boolean isError = false; @@ -914,16 +924,20 @@ pt = caretPosition.getOffset(); consoleTextPane.setCaretPosition(pt); - try { - vBar.setValue(vBar.getMaximum()); - } catch (Throwable e) { - // - } - } catch (Exception e) { e.printStackTrace(); consoleTextPane.setCaretPosition(getLength()); } + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + try { + vBar.setValue(vBar.getMaximum()); + } catch (Throwable e) { + // + } + } + }); } void outputError(String strError) { Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/ConsoleTextArea.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/ConsoleTextArea.java 2015-09-05 04:19:46 UTC (rev 20756) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/ConsoleTextArea.java 2015-09-06 04:09:52 UTC (rev 20757) @@ -29,10 +29,8 @@ import java.io.InputStreamReader; import java.io.PrintStream; -import javax.swing.JOptionPane; import javax.swing.JTextArea; -import org.jmol.i18n.GT; import org.openscience.jmol.app.jmolpanel.LoopedStreams; public class ConsoleTextArea extends JTextArea { @@ -50,46 +48,35 @@ String redirect = (doRedirect ? System.getProperty("JmolConsole") : "false"); if (redirect == null || redirect.equals("true")) { - // Redirect System.out & System.err. - + // Redirect System.out & System.err. PrintStream ps = new PrintStream(ls.getOutputStream()); System.setOut(ps); System.setErr(ps); } - startConsoleReaderThread(ls.getInputStream()); } // ConsoleTextArea() private void startConsoleReaderThread(InputStream inStream) { - final BufferedReader br = - new BufferedReader(new InputStreamReader(inStream)); + final BufferedReader br = new BufferedReader(new InputStreamReader(inStream)); new Thread(new Runnable() { - - @Override public void run() { Thread.currentThread().setName("ConsoleReaderThread"); - StringBuilder sb = new StringBuilder(); try { String s; //Document doc = getDocument(); - s = br.readLine(); - while (s != null) { + while ((s = br.readLine()) != null) { //boolean caretAtEnd = false; //caretAtEnd = (getCaretPosition() == doc.getLength()); - sb.setLength(0); - append(sb.append(s).append('\n').toString()); + append(s + "\n"); //if (caretAtEnd) { //setCaretPosition(doc.getLength()); //} - s = br.readLine(); } - } catch (IOException e) { - JOptionPane.showMessageDialog(null, GT.o(GT._( - "Error reading from BufferedReader: {0}"), e.getMessage())); - System.exit(1); + } catch (Exception e) { + // } } }).start(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-10-04 04:16:44
|
Revision: 20806 http://sourceforge.net/p/jmol/code/20806 Author: hansonr Date: 2015-10-04 04:16:41 +0000 (Sun, 04 Oct 2015) Log Message: ----------- Jmol.___JmolVersion="14.3.16_2015.10.03" new feature: if, for, and while can all operate using no braces for single-line bodies -- similar to JavaScript and Java -- examples: for(var i = 0; i < 10; i++) for(var j = 0; j < 10; j++) print i*j if (i == 1) print i else print 0 bug fix: translucent echo backgrounds not saved in state properly Modified Paths: -------------- trunk/Jmol/src/org/jmol/script/ScriptCompiler.java trunk/Jmol/src/org/jmol/script/ScriptEval.java trunk/Jmol/src/org/jmol/script/ScriptFlowContext.java trunk/Jmol/src/org/jmol/script/T.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/StateCreator.java trunk/Jmol/src/org/openscience/jmol/app/JmolApp.java Modified: trunk/Jmol/src/org/jmol/script/ScriptCompiler.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-10-02 02:19:13 UTC (rev 20805) +++ trunk/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-10-04 04:16:41 UTC (rev 20806) @@ -250,7 +250,7 @@ private void addTokenToPrefix(T token) { if (logMessages) - Logger.info("addTokenToPrefix" + token); + Logger.info("addTokenToPrefix" + lineCurrent + " " + iCommand + " " + token); ltoken.addLast(token); if (token.tok != T.nada) lastToken = token; @@ -365,6 +365,20 @@ checkImpliedScriptCmd = false; if (ichToken < cchScript) continue; + if (flowContext != null) { + ichCurrentCommand = cchScript; + while (flowContext != null) { + fixFlowAddLine(flowContext); + if (flowContext.checkForceEndIf(0)) { + forceFlowEnd(flowContext.token); + ichCurrentCommand = cchScript; + processTokenList(iLine, isFull); + } else { + flowContext = flowContext.parent; + } + } + lltoken.addLast(new T[]{T.o(T.nada, "// end of script")}); + } setAaTokenCompiled(); return (flowContext == null || errorStr(ERROR_missingEnd, T.nameOf(flowContext.token.tok))); @@ -385,7 +399,7 @@ case ERROR: return false; } - switch (parseCommandParameter()) { + switch (parseCommandParameter(iLine, isFull)) { case CONTINUE: continue; case ERROR: @@ -446,11 +460,17 @@ return true; switch (tokCommand) { case T.forcmd: + case T.whilecmd: + case T.ifcmd: + case T.elsecmd: + case T.elseif: + // end of a line, after (...), no { flowContext.addLine = 1; + flowContext.forceEndIf = true; return false; case T.set: - if (isNewSet) - break; + if (nTokens > 1 && ltoken.get(1).tok == T.echo) + return false; //$FALL-THROUGH$ case T.print: case T.log: @@ -632,8 +652,9 @@ } private int processTokenList(short iLine, boolean doCompile) { - if (nTokens > 0 || comment != null) { - if (nTokens == 0) { + int n = ltoken.size(); + if (n > 0 || comment != null) { + if (n == 0) { // just a comment ichCurrentCommand = ichToken; if (comment != null) { @@ -646,7 +667,7 @@ if (wasImpliedScript()) return CONTINUE; if (isNewSet - && nTokens > 2 + && n > 2 && tokAt(2) == T.per && (tokAt(3) == T.sort || tokAt(3) == T.reverse || tokAt(3) == T.push || tokAt(3) == T.pop)) { // check for x.sort or x.reverse or a.push(xxx) @@ -664,7 +685,7 @@ if (thisFunction != null && thisFunction.cmdpt0 < 0) { thisFunction.cmdpt0 = iCommand; } - if (nTokens == 1 && braceCount == 1) { + if (n == 1 && braceCount == 1) { // ...{... if (lastFlowCommand == null) { parenCount = setBraceCount = braceCount = 0; @@ -681,11 +702,12 @@ if (lastFlowCommand.tok != T.process && (tokAt(0) == T.leftbrace)) ltoken.remove(0); lastFlowCommand = null; + lastFlowContext = flowContext; } } if (bracketCount > 0 || setBraceCount > 0 || parenCount > 0 || braceCount == 1 && !checkFlowStartBrace(true)) { - error(nTokens == 1 ? ERROR_commandExpected + error(n == 1 ? ERROR_commandExpected : ERROR_endOfCommandUnexpected); return ERROR; } @@ -714,7 +736,7 @@ if (doCompile && !compileCommand()) return ERROR; if (logMessages) { - Logger.debug("-------------------------------------"); + Logger.info("-------------------------------------"); } boolean doEval = true; switch (tokCommand) { @@ -760,13 +782,23 @@ } if (endOfLine) { - if (flowContext != null && flowContext.checkForceEndIf()) { - if (!isComment) + if (flowContext != null && flowContext.checkForceEndIf(-1)) { + if (isComment) { + if (flowContext.addLine > 0) { + flowContext.addLine++; + flowContext.forceEndIf = true; + } + } else if (n > 0) { forceFlowEnd(flowContext.token); + if (lastFlowContext.addLine > 0) { + lastFlowContext.forceEndIf = true; + } + } isEndOfCommand = true; cchToken = 0; ichCurrentCommand = ichToken; - lineCurrent--; + if (n > 0) + lineCurrent--; return CONTINUE; } isComment = false; @@ -1391,7 +1423,7 @@ //$FALL-THROUGH$ case T.endifcmd: if (flowContext != null) - flowContext.forceEndIf = false; + flowContext.forceEndIf = false; //$FALL-THROUGH$ case T.elsecmd: if (nTokens > 0) { @@ -1456,14 +1488,21 @@ } break; case T.leftbrace: - braceCount++; - if (braceCount == 1 && parenCount == 0 && checkFlowStartBrace(false)) { + if (++braceCount == 1 && parenCount == 0 && checkFlowStartBrace(false)) { + // specifically for else { but not elseIf ( ) { isEndOfCommand = true; - if (flowContext != null) - flowContext.forceEndIf = false; + ScriptFlowContext f = (flowContext != null && flowContext.addLine == 0 + || lastFlowContext == null ? flowContext : lastFlowContext); + if (f != null) { + f.addLine = 0; + f.forceEndIf = false; + lastToken = T.tokenLeftBrace; + lastFlowContext = f; + } return CONTINUE; } - //$FALL-THROUGH$ + parenCount++; + break; case T.leftparen: parenCount++; // the select() function uses dual semicolon notation @@ -1495,8 +1534,7 @@ braceCount--; //$FALL-THROUGH$ case T.rightparen: - parenCount--; - if (parenCount < 0) + if (--parenCount < 0) return ERROR(ERROR_tokenUnexpected, ident); // we need to remove the semiskip if parentheses or braces have been // closed. 11.5.46 @@ -1552,7 +1590,7 @@ return true; } - private int parseCommandParameter() { + private int parseCommandParameter(short iLine, boolean isFull) { // PART II: // // checking tokens based on the current command @@ -1601,8 +1639,23 @@ tokCommand = T.nada; return CONTINUE; } - if (theTok != T.leftbrace) + + if (theTok != T.leftbrace) { + if (flowContext != null) { + fixFlowAddLine(flowContext); + while (flowContext != null) { + if (flowContext.checkForceEndIf(0)) { + forceFlowEnd(flowContext.token); + processTokenList(iLine, isFull); + setCommand(theToken); + theTok = theToken.tok; + } else { + break; + } + } + } lastFlowCommand = null; + } if (theTok == T.opAnd) { //& introduces a resume context @@ -1743,48 +1796,39 @@ return CONTINUE; } break; - case T.switchcmd: - case T.whilecmd: - if (nTokens > 2 && braceCount == 0 && parenCount == 0) { - isEndOfCommand = true; - ichEnd = ichToken + 1; - flowContext.setLine(); - } - break; - case T.elseif: - case T.ifcmd: - if (nTokens > 2 && braceCount == 0 && parenCount == 0) { - // so { or : end up new commands - isEndOfCommand = true; - ichEnd = ichToken + 1; - flowContext.setLine(); - } - break; - case T.process: - isEndOfCommand = true; - ichEnd = ichToken + 1; - flowContext.setLine(); - break; case T.forcmd: if (nTokens == 1) { if (theTok != T.leftparen) return ERROR(ERROR_unrecognizedToken, ident); forPoint3 = nSemiSkip = 0; nSemiSkip += 2; - } else if (nTokens == 3 && tokAt(2) == T.var) { + break; + } + if (nTokens == 3 && tokAt(2) == T.var) { newContextVariable(ident); - } else if ((nTokens == 3 || nTokens == 4) && theTok == T.in) { + break; + } + if ((nTokens == 3 || nTokens == 4) && theTok == T.in) { // for ( var x IN // for ( x IN nSemiSkip -= 2; forPoint3 = 2; addTokenToPrefix(theToken); theToken = T.tokenLeftParen; - } else if (braceCount == 0 && parenCount == 0) { - isEndOfCommand = true; - ichEnd = ichToken + 1; - flowContext.setLine(); - } + break; + } + //$FALL-THROUGH$ + case T.switchcmd: + case T.whilecmd: + case T.elseif: + case T.ifcmd: + if (nTokens <= 2 ||braceCount != 0 || parenCount != 0) + break; + //$FALL-THROUGH$ + case T.process: + isEndOfCommand = true; + ichEnd = ichToken + 1; + flowContext.setLine(); break; case T.var: if (nTokens == 1) { @@ -1945,7 +1989,8 @@ } private boolean checkFlowStartBrace(boolean atEnd) { - if ((!T.tokAttr(tokCommand, T.flowCommand) || tokCommand == T.breakcmd || tokCommand == T.continuecmd)) + int tok = tokCommand; + if ((!T.tokAttr(tok, T.flowCommand) || tok == T.breakcmd || tok == T.continuecmd)) return false; if (atEnd) { if (tokenCommand.tok != T.casecmd && tokenCommand.tok != T.defaultcmd) { @@ -1960,6 +2005,7 @@ Lst<T> vPush = new Lst<T>(); int pushCount; + private ScriptFlowContext lastFlowContext; private int checkFlowEndBrace() { @@ -1994,9 +2040,10 @@ } return forceFlowEnd(token); } - private int forceFlowEnd(T token) { + // need to be able to UNDO this. T t0 = tokenCommand; + lastFlowContext = flowContext; setCommand(T.o(T.end, "end")); if (!checkFlowCommand("end")) return T.nada; @@ -2059,6 +2106,22 @@ case T.switchcmd: case T.whilecmd: break; + case T.elseif: + case T.elsecmd: + if (lastFlowContext != null && lastFlowContext.forceEndIf + && lastFlowContext.addLine > 0) { + flowContext = lastFlowContext; + flowContext.forceEndIf = true; + if (isFlowIfContextOK(flowContext, tokCommand) + && lltoken.get(iCommand - 1)[0].tok == T.end) + lltoken.remove(pt = --iCommand); + } + if (flowContext != null && !isFlowIfContextOK(flowContext, tokCommand)) + flowContext = flowContext.parent; + if (!isFlowIfContextOK(flowContext, tokCommand)) + return errorStr(ERROR_badContext, ident); + flowContext.token.intValue = flowContext.setPt0(pt, false); + break; case T.endifcmd: isEnd = true; if (flowContext == null || flowContext.token.tok != T.ifcmd @@ -2067,12 +2130,6 @@ && flowContext.token.tok != T.elseif) return errorStr(ERROR_badContext, ident); break; - case T.elsecmd: - if (flowContext == null || flowContext.token.tok != T.ifcmd - && flowContext.token.tok != T.elseif) - return errorStr(ERROR_badContext, ident); - flowContext.token.intValue = flowContext.setPt0(pt, false); - break; case T.breakcmd: case T.continuecmd: isNew = false; @@ -2081,38 +2138,27 @@ if (tokCommand == T.continuecmd) while (f != null && f.token.tok != T.forcmd && f.token.tok != T.whilecmd) - f = f.getParent(); + f = f.parent; if (f == null) return errorStr(ERROR_badContext, ident); setCommand(T.tv(tokCommand, f.pt0, ident)); //copy break; + case T.casecmd: case T.defaultcmd: - if (flowContext == null || flowContext.token.tok != T.switchcmd - && flowContext.token.tok != T.casecmd && flowContext.ptDefault > 0) - return errorStr(ERROR_badContext, ident); - flowContext.token.intValue = flowContext.setPt0(pt, true); - break; - case T.casecmd: - if (flowContext == null || flowContext.token.tok != T.switchcmd + if (flowContext == null + || flowContext.token.tok != T.switchcmd && flowContext.token.tok != T.casecmd - && flowContext.token.tok != T.defaultcmd) + && (tokCommand == T.defaultcmd ? flowContext.ptDefault > 0 + : flowContext.token.tok != T.defaultcmd)) return errorStr(ERROR_badContext, ident); - flowContext.token.intValue = flowContext.setPt0(pt, false); + flowContext.token.intValue = flowContext.setPt0(pt, + tokCommand == T.defaultcmd); break; - case T.elseif: - if (flowContext == null || flowContext.token.tok != T.ifcmd - && flowContext.token.tok != T.elseif - && flowContext.token.tok != T.elsecmd) - return errorStr(ERROR_badContext, "elseif"); - flowContext.token.intValue = flowContext.setPt0(pt, false); - break; } if (isEnd) { flowContext.token.intValue = (tokCommand == T.catchcmd ? -pt : pt); if (tokCommand == T.endifcmd) - flowContext = flowContext.getParent(); - // if (tokCommand == T.trycmd) { - // } + flowContext = flowContext.parent; } else if (isNew) { ContextToken ct = ContextToken.newCmd(tokCommand, tokenCommand.value); if (tokCommand == T.switchcmd) @@ -2128,13 +2174,12 @@ pushCount++; vPush.addLast(ct); break; - case T.elsecmd: - case T.elseif: - flowContext.token = ct; - break; case T.casecmd: case T.defaultcmd: ct.contextVariables = flowContext.token.contextVariables; + //$FALL-THROUGH$ + case T.elsecmd: + case T.elseif: flowContext.token = ct; break; case T.process: @@ -2154,6 +2199,12 @@ return true; } + private boolean isFlowIfContextOK(ScriptFlowContext f, int tokCommand) { + return (f != null && (f.token.tok == T.ifcmd + || f.token.tok == T.elseif + || f.token.tok == T.elsecmd && tokCommand != T.elsecmd)); + } + private boolean checkFlowEnd(int tok, String ident, int pt1) { if (flowContext == null || flowContext.token.tok != tok) { boolean isOK = true; @@ -2197,10 +2248,21 @@ default: return errorStr(ERROR_unrecognizedToken, "end " + ident); } - flowContext = flowContext.getParent(); + flowContext = flowContext.parent; + fixFlowAddLine(flowContext); return true; } + private void fixFlowAddLine(ScriptFlowContext flowContext) { + while (flowContext != null) { + if (flowContext.addLine > 0) { + flowContext.addLine = lineCurrent - flowContext.ptLine; + flowContext.forceEndIf = true; + } + flowContext = flowContext.parent; + } + } + private boolean getData(String key) { addTokenToPrefix(T.o(T.string, key)); ichToken += key.length() + 2; Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEval.java 2015-10-02 02:19:13 UTC (rev 20805) +++ trunk/Jmol/src/org/jmol/script/ScriptEval.java 2015-10-04 04:16:41 UTC (rev 20806) @@ -2144,7 +2144,7 @@ } if (!chk && !checkContinue()) break; - if (lineNumbers[pc] > lineEnd) + if (pc >= lineNumbers.length || lineNumbers[pc] > lineEnd) break; if (debugHigh) { long timeBegin = 0; @@ -3449,8 +3449,8 @@ isOK = (j >= 0); } } else { - // for (i = 1; i < 3; i = i + 1); + // for (i = 1; i < 3; i = i + 1); // for (var i = 1; i < 3; i = i + 1); // for (;;;); // for (var x in {...}) { xxxxx } @@ -3577,15 +3577,16 @@ forVars[0] = forVar; forVars[1] = forVal; } else { - if (T.tokAttr(tokAt(j), T.misc) - || (forVal = getContextVariableAsVariable(key, false)) != null) { + int vtok = tokAt(j); + if (vtok != T.semicolon && (T.tokAttr(vtok, T.misc) + || (forVal = getContextVariableAsVariable(key, false)) != null)) { if (!isMinusMinus && getToken(++j).tok != T.opEQ) invArg(); if (isMinusMinus) j -= 2; setVariable(++j, slen - 1, key, false); } - isOK = parameterExpressionBoolean(pts[0] + 1, pts[1]); + isOK = (pts[0] + 1 == pts[1] || parameterExpressionBoolean(pts[0] + 1, pts[1])); } } if (isOK && tok == T.in && j >= 0) { Modified: trunk/Jmol/src/org/jmol/script/ScriptFlowContext.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptFlowContext.java 2015-10-02 02:19:13 UTC (rev 20805) +++ trunk/Jmol/src/org/jmol/script/ScriptFlowContext.java 2015-10-04 04:16:41 UTC (rev 20806) @@ -142,14 +142,14 @@ int ptDefault; ScriptFunction function; SV var; - private ScriptFlowContext parent; + ScriptFlowContext parent; int lineStart; int commandStart; int ptLine; int ptCommand; boolean forceEndIf = true; String ident; - public int addLine; + int addLine; ScriptFlowContext(ScriptCompiler compiler, ContextToken token, int pt0, ScriptFlowContext parent) { this.compiler = compiler; @@ -165,15 +165,16 @@ ScriptFlowContext getBreakableContext(int nLevelsUp) { ScriptFlowContext f = this; while (f != null && (!ScriptCompiler.isBreakableContext(f.token.tok) || nLevelsUp-- > 0)) - f = f.getParent(); + f = f.parent; return f; } - boolean checkForceEndIf() { + boolean checkForceEndIf(int offset) { + if (ptCommand == compiler.iCommand && addLine > 0) + addLine++; boolean test = forceEndIf - && ptCommand < this.compiler.iCommand - && ptLine + addLine == this.compiler.lineCurrent; - //System.out.println("checking" + pt + " " + test + " " + ident + " " + forceEndIf + " " + ptCommand + " " + iCommand + "/" + ptLine + " " + lineCurrent); + && ptCommand < compiler.iCommand + && ptLine + (addLine == 0 ? 0 : addLine + offset) == compiler.lineCurrent; if (test) // only once! forceEndIf = false; return test; @@ -188,8 +189,8 @@ } void setLine() { - ptLine = this.compiler.lineCurrent; - ptCommand = this.compiler.iCommand + 1; + ptLine = compiler.lineCurrent; + ptCommand = compiler.iCommand + 1; } @Override @@ -199,11 +200,6 @@ + " command " + commandStart; } - ScriptFlowContext getParent() { - //System.out.println("FlowContext end " + path() + " on line/command " + lineCurrent + " " + iCommand); - return parent; - } - String path() { String s = ""; ScriptFlowContext f = this; Modified: trunk/Jmol/src/org/jmol/script/T.java =================================================================== --- trunk/Jmol/src/org/jmol/script/T.java 2015-10-02 02:19:13 UTC (rev 20805) +++ trunk/Jmol/src/org/jmol/script/T.java 2015-10-04 04:16:41 UTC (rev 20806) @@ -1387,6 +1387,7 @@ public final static T tokenArraySquare = o(array, "["); // special operator stack flag public final static T tokenArrayOpen = o(leftsquare, "["); // used also as special operand stack flag public final static T tokenArrayClose = o(rightsquare, "]"); + public final static T tokenLeftBrace = o(leftbrace, "{"); public final static T tokenExpressionBegin = o(expressionBegin, "expressionBegin"); public final static T tokenExpressionEnd = o(expressionEnd, "expressionEnd"); Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-02 02:19:13 UTC (rev 20805) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-04 04:16:41 UTC (rev 20806) @@ -61,10 +61,34 @@ TODO: consider if models with no atoms will cause issues in relation to model.firstAtomIndex -Jmol.___JmolVersion="14.3.16_2015.10.01" +Jmol.___JmolVersion="14.3.16_2015.10.03" + +new feature: if, for, and while can all operate using no braces for single-line bodies + -- similar to JavaScript and Java + -- examples: + + for(var i = 0; i < 10; i++) + for(var j = 0; j < 10; j++) + print i*j + + if (i == 1) + print i + else + print 0 + +bug fix: translucent echo backgrounds not saved in state properly + + +JmolVersion="14.3.16_2015.10.01" + +bug fix: for (; i < 10; i++) not working +bug fix: for (;;i++) not working +bug fix: for (;;) not working + +JmolVersion="14.3.16_2015.10.01" bug fix: hydrogens added to backbone should be part of "backbone" definition - -- no-hydrogen definition is _bb, but that is + -- no-hydrogen definition is _bb new feature: calculate hydrogens TRUE -- calculates hydrogens and multiple bonding Modified: trunk/Jmol/src/org/jmol/viewer/StateCreator.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StateCreator.java 2015-10-02 02:19:13 UTC (rev 20805) +++ trunk/Jmol/src/org/jmol/viewer/StateCreator.java 2015-10-04 04:16:41 UTC (rev 20806) @@ -1357,10 +1357,10 @@ s.append(C.getColixTranslucencyLabel(t.colix)); s.append(" ").append(C.getHexCode(t.colix)); if (t.bgcolix != 0) { - s.append("; color echo background"); + s.append("; color echo background "); if (C.isColixTranslucent(t.bgcolix)) - s.append(C.getColixTranslucencyLabel(t.bgcolix)); - s.append(" ").append(C.getHexCode(t.bgcolix)); + s.append(C.getColixTranslucencyLabel(t.bgcolix)).append(" "); + s.append(C.getHexCode(t.bgcolix)); } s.append(";\n"); return s.toString(); Modified: trunk/Jmol/src/org/openscience/jmol/app/JmolApp.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/JmolApp.java 2015-10-02 02:19:13 UTC (rev 20805) +++ trunk/Jmol/src/org/openscience/jmol/app/JmolApp.java 2015-10-04 04:16:41 UTC (rev 20806) @@ -130,9 +130,8 @@ args = line.getArgs(); if (args.length > 0) { - modelFilename = args[0]; + modelFilename = args[0]; } - checkOptions(line, options); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-11-29 22:18:45
|
Revision: 20870 http://sourceforge.net/p/jmol/code/20870 Author: hansonr Date: 2015-11-29 22:18:42 +0000 (Sun, 29 Nov 2015) Log Message: ----------- Jmol.___JmolVersion="14.5.0_2015.11.29" new feature: drawing of spheres in 2D window -- as percent position or absolute, as for ECHO -- diameter is % if position is %; otherwise is pixels -- examples draw d1 diameter 5 [90 90 %] color blue // 5% diameter draw d2 diameter 15 [90 90] color blue // pixel diameter draw dO diameter 2 [90 90 %] color @{ {_O}.color } set echo eO [95 90 %]; echo "O" -- can be used in the context of an element key: function createElementKey() { var y = 90 for (var e in {*}.element.pivot){ var c = {element=@e}.color draw ID @{"d_"+ e} diameter 2 [90 @y %] color @c set echo ID @{"e_" + e} [91 @{y-1} %] echo @e font echo 24 bold sansserif color echo black y -= 5 } } load $caffeine createElementKey new feature: additional predefined sets for periodic table: "@nonmetal _H,_He,_C,_N,_O,_F,_Ne,_S,_P,_Cl,_Ar,_Se,_Br,_Kr,_I,_Xe,_At,_Rn", "@noblegas _He,_Ne,_Ar,_Kr,_Xe,_Rn", "@metal !nonmetal", "@alkaliMetal _Li,_Na,_K,_Rb,_Cs,_Fr", "@alkalineEarth _Be,_Mg,_Ca,_Sr,_Ba,_Ra", "@semimetal _B,_Si,_Ge,_As,_Sb,_Te,_Po", "@transitionMetal elemno>=21&elemno<=30|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112", "@lanthanide elemno>=57&elemno<=71", "@actinide elemno>=89&elemno<=103", new feature: load =am/<mineralName> loads last (earliest?) entry in American Mineralogist Crystal Database -- for example, load =am/corundum -- reads mineral page such as http://rruff.geo.arizona.edu/AMS/minerals/Corundum and extracts from that the last database ID. -- adding /1, /2, ..., /0 will return only the first, second, ..., last structure on that page -- requires a preliminary search followed by the actual file load. -- only the final ID-based file load is saved in the state. -- a hack; uses an evaluation of the string: 'http://rruff.geo.arizona.edu/AMS/CIF_text_files/'+load('http://rruff.geo.arizona.edu/AMS/minerals/%FILE').split(\"viewJmol('\")[%n].split(\"'\")[1]+'_cif.txt' -- for example, see http://rruff.geo.arizona.edu/AMS/viewJmol.php?id=19280 bug fix: files with names containing "[]" cannot be loaded. bug fix: print {cell=555}.find("cellFormula") can fail because of 2% slop involved in defining cell=555 Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/popup/JmolGenericPopup.java branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java branches/v14_4/Jmol/src/org/jmol/shapespecial/Draw.java branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java branches/v14_4/Jmol/src/org/jmol/util/SimpleUnitCell.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties branches/v14_4/Jmol/src/org/jmol/viewer/OutputManager.java branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java branches/v14_4/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java trunk/Jmol/src/org/jmol/popup/JmolGenericPopup.java trunk/Jmol/src/org/jmol/renderspecial/DrawRenderer.java trunk/Jmol/src/org/jmol/script/ScriptEval.java trunk/Jmol/src/org/jmol/script/ScriptParam.java trunk/Jmol/src/org/jmol/shapespecial/Draw.java trunk/Jmol/src/org/jmol/symmetry/Symmetry.java trunk/Jmol/src/org/jmol/symmetry/UnitCellIterator.java trunk/Jmol/src/org/jmol/util/SimpleUnitCell.java trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java trunk/Jmol/src/org/jmol/viewer/JC.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/OutputManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java Modified: branches/v14_4/Jmol/src/org/jmol/popup/JmolGenericPopup.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/popup/JmolGenericPopup.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/popup/JmolGenericPopup.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -362,8 +362,7 @@ int i = modelSetFileName.lastIndexOf("."); isZapped = (JC.ZAP_TITLE.equals(modelSetName)); if (isZapped || "string".equals(modelSetFileName) - || "files".equals(modelSetFileName) - || "string[]".equals(modelSetFileName)) + || "String[]".equals(modelSetFileName)) modelSetFileName = ""; modelSetRoot = modelSetFileName.substring(0, i < 0 ? modelSetFileName.length() : i); Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -4408,7 +4408,7 @@ if (isSmiles) { filename = "$" + filename; } else { - if (filename.indexOf("[]") >= 0) + if (filename.equals("String[]")) return; if (filename.indexOf("[") == 0) { filenames = Escape.unescapeStringArray(filename); @@ -4440,7 +4440,7 @@ i++; // for whatever reason, we don't allow a filename with [] in it. - if (filename.indexOf("[]") >= 0) + if (filename.equals("String[]")) return; // MANIFEST "..." if ((tok = tokAt(i)) == T.manifest) { @@ -4581,7 +4581,7 @@ } else if (!isData) { if (localName != null) localName = vwr.fm.getFilePath(localName, false, false); - if (!filename.equals("string") && !filename.equals("string[]")) + if (!filename.equals("string") && !filename.equals("String[]")) loadScript.append("/*file*/").append( (localName != null ? PT.esc(localName) : "$FILENAME$")); } Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -2766,15 +2766,14 @@ case T.split: if (x.tok == T.bitset) { BS bsSelected = SV.bsSelectVar(x); - sArg = "\n"; int modelCount = vwr.ms.mc; - s = ""; + Lst<SV> lst = new Lst<SV>(); for (int i = 0; i < modelCount; i++) { - s += (i == 0 ? "" : "\n"); BS bs = vwr.getModelUndeletedAtomsBitSet(i); bs.and(bsSelected); - s += Escape.eBS(bs); + lst.addLast(SV.getVariable(bs)); } + return mp.addXList(lst); } return mp.addXAS(PT.split(s, sArg)); case T.join: Modified: branches/v14_4/Jmol/src/org/jmol/shapespecial/Draw.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapespecial/Draw.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/shapespecial/Draw.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -358,13 +358,6 @@ return; } - if ("coords" == propertyName) { - Lst<SV> pts = (Lst<SV>) value; - for (int i = 0, n = pts.size(); i < n; i++) - vData.addLast(new Object[] { Integer.valueOf(PT_COORD), SV.ptValue(pts.get(i)) }); - return; - } - if ("offset" == propertyName) { offset = V3.newV((P3) value); if (thisMesh != null) @@ -383,9 +376,13 @@ return; } + if ("coords" == propertyName) { + addPoints(PT_COORD, value, false); + return; + } + if ("modelBasedPoints" == propertyName) { - vData.addLast(new Object[] { Integer.valueOf(PT_MODEL_BASED_POINTS), - value }); + addPoints(PT_MODEL_BASED_POINTS, value, true); return; } @@ -419,6 +416,26 @@ setPropertySuper(propertyName, value, bs); } + private void addPoints(int type, Object value, boolean allowNull) { + @SuppressWarnings("unchecked") + Lst<SV> pts = (Lst<SV>) value; + Integer key = Integer.valueOf(type); + for (int i = 0, n = pts.size(); i < n; i++) { + SV v = pts.get(i); + P3 pt; + switch (v.tok) { + case T.bitset: + if (!allowNull && ((BS) v.value).isEmpty()) + continue; + pt = vwr.ms.getAtomSetCenter((BS) v.value); + break; + default: + pt = SV.ptValue(v); + } + vData.addLast(new Object[] { key, pt }); + } + } + private void deleteModels(int modelIndex) { //int firstAtomDeleted = ((int[])((Object[])value)[2])[1]; //int nAtomsDeleted = ((int[])((Object[])value)[2])[2]; Modified: branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -378,7 +378,6 @@ public boolean checkUnitCell(SymmetryInterface uc, P3 cell, P3 ptTemp, boolean isAbsolute) { uc.toFractional(ptTemp, isAbsolute); - float slop = 0.02f; // {1 1 1} here is the original cell return (ptTemp.x >= cell.x - 1f - slop && ptTemp.x <= cell.x + slop && ptTemp.y >= cell.y - 1f - slop && ptTemp.y <= cell.y + slop Modified: branches/v14_4/Jmol/src/org/jmol/util/SimpleUnitCell.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/util/SimpleUnitCell.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/util/SimpleUnitCell.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -373,18 +373,22 @@ cell.z = (nnn % f) + offset; } + public final static float SLOP = 0.02f; + private final static float SLOP1 = 1 - SLOP; + /** * calculate weighting of 1 (interior), 0.5 (face), 0.25 (edge), or 0.125 (vertex) * @param pt + * @param tolerance fractional allowance to consider this on an edge * @return weighting */ public static float getCellWeight(P3 pt) { float f = 1; - if (pt.x == 0) + if (pt.x <= SLOP || pt.x >= SLOP1) f /= 2; - if (pt.y == 0) + if (pt.y <= SLOP || pt.y >= SLOP1) f /= 2; - if (pt.z == 0) + if (pt.z <= SLOP || pt.z >= SLOP1) f /= 2; return f; } Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-29 22:18:42 UTC (rev 20870) @@ -8,8 +8,17 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.11.26" +Jmol.___JmolVersion="14.4.0_2015.11.29" +bug fix: files with names containing "[]" cannot be loaded. +bug fix: print {cell=555}.find("cellFormula") can fail because of 2% slop involved in defining cell=555 + +JmolVersion="14.4.0_2015.11.27" + +bug fix: {atomset}.split() [split atomset by model] returns array of strings, not array of atoms + +JmolVersion="14.4.0_2015.11.26" + bug fix: getproperty SHAPEINFO fails if CGO is present bug fix: CGO from state deletes DRAW objects bug fix: CGO not properly isolated to current model; "fixed" not implemented Modified: branches/v14_4/Jmol/src/org/jmol/viewer/OutputManager.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/OutputManager.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/viewer/OutputManager.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -565,7 +565,7 @@ fileName = fullPath[0]; String pathName = (type.equals("FILE") ? vwr.fm.getFullPathName(false) : null); boolean getCurrentFile = (pathName != null && (pathName.equals("string") - || pathName.indexOf("[]") >= 0 || pathName.equals("JSNode"))); + || pathName.equals("String[]") || pathName.equals("JSNode"))); boolean asBytes = (pathName != null && !getCurrentFile); if (asBytes) { pathName = vwr.getModelSetPathName(); Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -1851,7 +1851,7 @@ Map<String, Object> htParams, SB loadScript) { if (fileName == null) return null; - if (fileName.indexOf("[]") >= 0) { + if (fileName.equals("String[]")) { // no reloading of string[] or file[] data -- just too complicated return null; } @@ -2287,7 +2287,7 @@ String filename = fm.getFullPathName(false); if (filename.equals("string") || filename.equals(JC.MODELKIT_ZAP_TITLE)) return ms.getInlineData(am.cmi); - if (filename.indexOf("[]") >= 0) + if (filename.equals("String[]")) return filename; if (filename == "JSNode") return "<DOM NODE>"; Modified: branches/v14_4/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- branches/v14_4/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2015-11-27 11:57:16 UTC (rev 20869) +++ branches/v14_4/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -1576,7 +1576,7 @@ static final String chemFileProperty = "chemFile"; void notifyFileOpen(String fullPathName, String title) { - if (fullPathName == null || !fullPathName.equals("file[]")) { + if (fullPathName == null || !fullPathName.equals("String[]")) { int pt = (fullPathName == null ? -1 : fullPathName.lastIndexOf("|")); if (pt > 0) fullPathName = fullPathName.substring(0, pt); Modified: trunk/Jmol/src/org/jmol/popup/JmolGenericPopup.java =================================================================== --- trunk/Jmol/src/org/jmol/popup/JmolGenericPopup.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/popup/JmolGenericPopup.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -362,8 +362,7 @@ int i = modelSetFileName.lastIndexOf("."); isZapped = (JC.ZAP_TITLE.equals(modelSetName)); if (isZapped || "string".equals(modelSetFileName) - || "files".equals(modelSetFileName) - || "string[]".equals(modelSetFileName)) + || "String[]".equals(modelSetFileName)) modelSetFileName = ""; modelSetRoot = modelSetFileName.substring(0, i < 0 ? modelSetFileName.length() : i); Modified: trunk/Jmol/src/org/jmol/renderspecial/DrawRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderspecial/DrawRenderer.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/renderspecial/DrawRenderer.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -133,20 +133,24 @@ if (diameter == 0) diameter = 1; } - if ((dmesh.isVector) && dmesh.haveXyPoints) { - int ptXY = 0; - // [x y] or [x,y] refers to an xy point on the screen - // just a Point3f with z = Float.MAX_VALUE - // [x y %] or [x,y %] refers to an xy point on the screen - // as a percent - // just a Point3f with z = -Float.MAX_VALUE - for (int i = 0; i < 2; i++) - if (vertices[i].z == Float.MAX_VALUE - || vertices[i].z == -Float.MAX_VALUE) - ptXY += i + 1; - if (--ptXY < 2) { - renderXyArrow(ptXY); - return; + if (dmesh.haveXyPoints) { + if (dmesh.isVector) { + int ptXY = 0; + // [x y] or [x,y] refers to an xy point on the screen + // just a Point3f with z = Float.MAX_VALUE + // [x y %] or [x,y %] refers to an xy point on the screen + // as a percent + // just a Point3f with z = -Float.MAX_VALUE + for (int i = 0; i < 2; i++) + if (vertices[i].z == Float.MAX_VALUE + || vertices[i].z == -Float.MAX_VALUE) + ptXY += i + 1; + if (--ptXY < 2) { + renderXyArrow(ptXY); + return; + } + } else if (drawType == Draw.EnumDrawType.POINT){ + renderXyPoint(); } } int tension = 5; @@ -353,7 +357,26 @@ } } + private void renderXyPoint() { + // new in Jmol 14.5 + pt0.setT(vertices[0]); + if (diameter == 0) + diameter = (int) width; + if (pt0.z == -Float.MAX_VALUE) { + pt0.x *= vwr.tm.width / 100f; + pt0.y *= vwr.tm.height / 100f; + diameter = (int) (diameter * vwr.getScreenDim() / 100f); + } + if (g3d.isAntialiased()) + diameter *= 2; + pt0.y = vwr.tm.height - pt0.y; + pt0.z = vwr.tm.cameraDistance; + pt1i.set((int) pt0.x, (int) pt0.y, (int) pt0.z); + g3d.fillSphereI(diameter, pt1i); + } + private void renderXyArrow(int ptXY) { + // only 0 or 1 here; so ptXYZ is 1 or 0 int ptXYZ = 1 - ptXY; P3[] arrowPt = new P3[2]; arrowPt[ptXYZ] = pt1; Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEval.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/script/ScriptEval.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -4407,7 +4407,7 @@ if (isSmiles) { filename = "$" + filename; } else { - if (filename.indexOf("[]") >= 0) + if (filename.equals("String[]")) return; if (filename.indexOf("[") == 0) { filenames = Escape.unescapeStringArray(filename); @@ -4439,7 +4439,7 @@ i++; // for whatever reason, we don't allow a filename with [] in it. - if (filename.indexOf("[]") >= 0) + if (filename.equals("String[]")) return; // MANIFEST "..." if ((tok = tokAt(i)) == T.manifest) { @@ -4580,7 +4580,7 @@ } else if (!isData) { if (localName != null) localName = vwr.fm.getFilePath(localName, false, false); - if (!filename.equals("string") && !filename.equals("string[]")) + if (!filename.equals("string") && !filename.equals("String[]")) loadScript.append("/*file*/").append( (localName != null ? PT.esc(localName) : "$FILENAME$")); } Modified: trunk/Jmol/src/org/jmol/script/ScriptParam.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptParam.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/script/ScriptParam.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -553,6 +553,40 @@ return pt; } + public P4 xyzpParameter(int index) throws ScriptException { + // [x y z] or [x,y,z] refers to an xy point on the screen + // return a P4 with w = Float.MAX_VALUE + // [x y z%] or [x,y,z %] refers to an xyz point on the screen + // as a percent + // return a P4 with w = -Float.MAX_VALUE + + int tok = tokAt(index); + if (tok == T.spacebeforesquare) + tok = tokAt(++index); + if (tok != T.leftsquare || !isFloatParameter(++index)) + return null; + P4 pt = new P4(); + pt.x = floatParameter(index); + if (tokAt(++index) == T.comma) + index++; + if (!isFloatParameter(index)) + return null; + pt.y = floatParameter(index); + if (tokAt(++index) == T.comma) + index++; + if (!isFloatParameter(index)) + return null; + pt.z = floatParameter(index); + boolean isPercent = (tokAt(++index) == T.percent); + if (isPercent) + ++index; + if (tokAt(index) != T.rightsquare) + return null; + iToken = index; + pt.w = (isPercent ? -1 : 1) * Float.MAX_VALUE; + return pt; + } + public String optParameterAsString(int i) throws ScriptException { if (i >= slen) return ""; Modified: trunk/Jmol/src/org/jmol/shapespecial/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/shapespecial/Draw.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/shapespecial/Draw.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -880,7 +880,8 @@ if (nVertices == 3 && isPlane) isPlane = false; length = Float.MAX_VALUE; - thisMesh.diameter = 0; + if (isVector) + thisMesh.diameter = 0; } else if (nVertices == 2 && isVector) { ptList[1].add(ptList[0]); } Modified: trunk/Jmol/src/org/jmol/symmetry/Symmetry.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -378,11 +378,10 @@ public boolean checkUnitCell(SymmetryInterface uc, P3 cell, P3 ptTemp, boolean isAbsolute) { uc.toFractional(ptTemp, isAbsolute); - float slop = 0.02f; // {1 1 1} here is the original cell - return (ptTemp.x >= cell.x - 1f - slop && ptTemp.x <= cell.x + slop - && ptTemp.y >= cell.y - 1f - slop && ptTemp.y <= cell.y + slop - && ptTemp.z >= cell.z - 1f - slop && ptTemp.z <= cell.z + slop); + return (ptTemp.x >= cell.x - 1f - SimpleUnitCell.SLOP && ptTemp.x <= cell.x + SimpleUnitCell.SLOP + && ptTemp.y >= cell.y - 1f - SimpleUnitCell.SLOP && ptTemp.y <= cell.y + SimpleUnitCell.SLOP + && ptTemp.z >= cell.z - 1f - SimpleUnitCell.SLOP && ptTemp.z <= cell.z + SimpleUnitCell.SLOP); } @Override Modified: trunk/Jmol/src/org/jmol/symmetry/UnitCellIterator.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/UnitCellIterator.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/symmetry/UnitCellIterator.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -44,10 +44,13 @@ * @param atom * @param atoms * @param bsAtoms - * @param distance <= 0 indicates that distance will be set later, probably from a point + * @param distance + * <= 0 indicates that distance will be set later, probably from a + * point * @return */ - public UnitCellIterator set(SymmetryInterface unitCell, Atom atom, Atom[] atoms, BS bsAtoms, float distance) { + public UnitCellIterator set(SymmetryInterface unitCell, Atom atom, + Atom[] atoms, BS bsAtoms, float distance) { this.unitCell = unitCell; this.atoms = atoms; addAtoms(bsAtoms); @@ -95,13 +98,15 @@ if (max.z < p.z) max.z = p.z; } - minXYZ = P3i.new3((int)Math.floor(min.x), (int)Math.floor(min.y), (int)Math.floor(min.z)); - maxXYZ = P3i.new3((int)Math.ceil(max.x), (int)Math.ceil(max.y), (int)Math.ceil(max.z)); + minXYZ = P3i.new3((int) Math.floor(min.x), (int) Math.floor(min.y), + (int) Math.floor(min.z)); + maxXYZ = P3i.new3((int) Math.ceil(max.x), (int) Math.ceil(max.y), + (int) Math.ceil(max.z)); if (Logger.debugging) Logger.info("UnitCellIterator minxyz/maxxyz " + minXYZ + " " + maxXYZ); t = P3i.new3(minXYZ.x - 1, minXYZ.y, minXYZ.z); nextCell(); - } + } @Override public void addAtoms(BS bsAtoms) { @@ -109,7 +114,7 @@ if (done) return; unitList = new Lst<P3[]>(); - String cat = ""; + String cat = ""; M4[] ops = unitCell.getSymmetryOperations(); int nOps = ops.length; for (int i = bsAtoms.nextSetBit(0); i >= 0; i = bsAtoms.nextSetBit(i + 1)) { @@ -123,7 +128,7 @@ unitCell.unitize(pt); unitCell.toCartesian(pt, false); } else { - unitCell.toUnitCell(pt, null); + unitCell.toUnitCell(pt, null); } String key = "_" + (int) (pt.x * 100) + "_" + (int) (pt.y * 100) + "_" + (int) (pt.z * 100) + "_"; @@ -151,9 +156,9 @@ } return false; } - + private boolean nextCell() { - if (done) + if (done) return false; if (++t.x >= maxXYZ.x) { t.x = minXYZ.x; @@ -176,7 +181,7 @@ public int next() { return (done || ipt < 0 ? -1 : getAtom().i); } - + private Atom getAtom() { return ((Atom) unitList.get(listPt)[0]); } @@ -190,7 +195,7 @@ public P3 getPosition() { Atom a = getAtom(); if (Logger.debugging) - Logger.info("draw ID p_" + nFound + " " + p + " //" + a + " " + t); + Logger.info("draw ID p_" + nFound + " " + p + " //" + a + " " + t); if (this.p.distanceSquared(a) < 0.0001f) return a; Point3fi p = new Point3fi(); Modified: trunk/Jmol/src/org/jmol/util/SimpleUnitCell.java =================================================================== --- trunk/Jmol/src/org/jmol/util/SimpleUnitCell.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/util/SimpleUnitCell.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -373,18 +373,22 @@ cell.z = (nnn % f) + offset; } + public final static float SLOP = 0.02f; + private final static float SLOP1 = 1 - SLOP; + /** * calculate weighting of 1 (interior), 0.5 (face), 0.25 (edge), or 0.125 (vertex) * @param pt + * @param tolerance fractional allowance to consider this on an edge * @return weighting */ public static float getCellWeight(P3 pt) { float f = 1; - if (pt.x == 0) + if (pt.x <= SLOP || pt.x >= SLOP1) f /= 2; - if (pt.y == 0) + if (pt.y <= SLOP || pt.y >= SLOP1) f /= 2; - if (pt.z == 0) + if (pt.z <= SLOP || pt.z >= SLOP1) f /= 2; return f; } Modified: trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -889,32 +889,42 @@ return structureList; } - String resolveDataBase(String database, String id, String format) { - if (format == null) { - if ((format = databases.get(database.toLowerCase())) == null) - return null; - if (id.indexOf("/") < 0) { - if (database.equals("pubchem")) - id = "name/" + id; - else if (database.equals("nci")) - id += "/file?format=sdf&get3d=True"; - } - } else if (id.indexOf(".") >= 0 && format.indexOf("%FILE.") >= 0) { - // replace RCSB format extension when a file extension is made explicit - format = format.substring(0, format.indexOf("%FILE")); + String resolveDataBase(String database, String id, String format) { + if (format == null) { + if ((format = databases.get(database.toLowerCase())) == null) + return null; + int pt = id.indexOf("/"); + if (pt < 0) { + if (database.equals("pubchem")) + id = "name/" + id; + else if (database.equals("nci")) + id += "/file?format=sdf&get3d=True"; } - try { - while (format.indexOf("%c") >= 0) - for (int i = 1; i < 10; i++) { - format = PT.rep(format, "%c" + i, id.substring(i - 1, i)); - } - } catch (Exception e) { - // too bad. + if (format.startsWith("'")) { + // needs evaluation + int n = (pt > 0 ? PT.parseInt(id.substring(pt + 1)) : 0); + if (n > 0) + n++; + if (pt > 0) + id = id.substring(0, pt); + format = PT.rep(format, "%n", "" + n); } - return (format.indexOf("%FILE") >= 0 ? PT.formatStringS(format, "FILE", id) - : format.indexOf("%file") >= 0 ? PT.formatStringS(format, "file", - id.toLowerCase()) : format + id); + } else if (id.indexOf(".") >= 0 && format.indexOf("%FILE.") >= 0) { + // replace RCSB format extension when a file extension is made explicit + format = format.substring(0, format.indexOf("%FILE")); } + try { + while (format.indexOf("%c") >= 0) + for (int i = 1; i < 10; i++) { + format = PT.rep(format, "%c" + i, id.substring(i - 1, i)); + } + } catch (Exception e) { + // too bad. + } + return (format.indexOf("%FILE") >= 0 ? PT.formatStringS(format, "FILE", id) + : format.indexOf("%file") >= 0 ? PT.formatStringS(format, "file", + id.toLowerCase()) : format + id); + } static boolean doReportProperty(String name) { return (name.charAt(0) != '_' && unreportedProperties.indexOf(";" + name Modified: trunk/Jmol/src/org/jmol/viewer/JC.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JC.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/viewer/JC.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -67,7 +67,8 @@ "pubchem", "http://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/%FILE/SDF?record_type=3d", "map", "http://www.ebi.ac.uk/pdbe/api/%TYPE/%FILE?pretty=false&metadata=true", "rna3d", "http://rna.bgsu.edu/rna3dhub/%TYPE/download/%FILE", - "aflow", "http://aflowlib.mems.duke.edu/users/jmolers/binary_new/%FILE.aflow_binary" + "aflow", "http://aflowlib.mems.duke.edu/users/jmolers/binary_new/%FILE.aflow_binary", + "am", "'http://rruff.geo.arizona.edu/AMS/CIF_text_files/'+load('http://rruff.geo.arizona.edu/AMS/minerals/%FILE').split(\"viewJmol('\")[%n].split(\"'\")[1]+'_cif.txt'" }; public static String[] macros = { @@ -561,6 +562,7 @@ "@ssSegments within(dssr,'ssSegments')", "@stacks within(dssr,'stacks')", "@stems within(dssr,'stems')", + }; // these are only updated once per file load or file append @@ -627,8 +629,19 @@ "@spine protein&_a>=1&_a<4|nucleic&(_a>=6&_a<11|_a=13)", "@sidechain (protein,nucleic) & !backbone", "@base nucleic & !backbone", - "@dynamic_flatring search('[a]')" + "@dynamic_flatring search('[a]')", + //periodic table + "@nonmetal _H,_He,_C,_N,_O,_F,_Ne,_S,_P,_Cl,_Ar,_Se,_Br,_Kr,_I,_Xe,_At,_Rn", + "@noblegas _He,_Ne,_Ar,_Kr,_Xe,_Rn", + "@metal !nonmetal", + "@alkaliMetal _Li,_Na,_K,_Rb,_Cs,_Fr", + "@alkalineEarth _Be,_Mg,_Ca,_Sr,_Ba,_Ra", + "@semimetal _B,_Si,_Ge,_As,_Sb,_Te,_Po", + "@transitionMetal elemno>=21&elemno<=30|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112", + "@lanthanide elemno>=57&elemno<=71", + "@actinide elemno>=89&elemno<=103", + // "@hetero", handled specially }; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-29 22:18:42 UTC (rev 20870) @@ -62,8 +62,59 @@ TODO: consider if models with no atoms will cause issues in relation to model.firstAtomIndex -Jmol.___JmolVersion="14.5.0_2015.11.27" +Jmol.___JmolVersion="14.5.0_2015.11.29" +new feature: drawing of spheres in 2D window + -- as percent position or absolute, as for ECHO + -- diameter is % if position is %; otherwise is pixels + -- examples + draw d1 diameter 5 [90 90 %] color blue // 5% diameter + draw d2 diameter 15 [90 90] color blue // pixel diameter + draw dO diameter 2 [90 90 %] color @{ {_O}.color } + set echo eO [95 90 %]; echo "O" + -- can be used in the context of an element key: + function createElementKey() { + var y = 90 + for (var e in {*}.element.pivot){ + var c = {element=@e}.color + draw ID @{"d_"+ e} diameter 2 [90 @y %] color @c + set echo ID @{"e_" + e} [91 @{y-1} %] + echo @e + font echo 24 bold sansserif + color echo black + y -= 5 + } + } + load $caffeine + createElementKey + +new feature: additional predefined sets for periodic table: + "@nonmetal _H,_He,_C,_N,_O,_F,_Ne,_S,_P,_Cl,_Ar,_Se,_Br,_Kr,_I,_Xe,_At,_Rn", + "@noblegas _He,_Ne,_Ar,_Kr,_Xe,_Rn", + "@metal !nonmetal", + "@alkaliMetal _Li,_Na,_K,_Rb,_Cs,_Fr", + "@alkalineEarth _Be,_Mg,_Ca,_Sr,_Ba,_Ra", + "@semimetal _B,_Si,_Ge,_As,_Sb,_Te,_Po", + "@transitionMetal elemno>=21&elemno<=30|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112", + "@lanthanide elemno>=57&elemno<=71", + "@actinide elemno>=89&elemno<=103", + +new feature: load =am/<mineralName> loads last (earliest?) entry in American Mineralogist Crystal Database + -- for example, load =am/corundum + -- reads mineral page such as http://rruff.geo.arizona.edu/AMS/minerals/Corundum + and extracts from that the last database ID. + -- adding /1, /2, ..., /0 will return only the first, second, ..., last structure on that page + -- requires a preliminary search followed by the actual file load. + -- only the final ID-based file load is saved in the state. + -- a hack; uses an evaluation of the string: + 'http://rruff.geo.arizona.edu/AMS/CIF_text_files/'+load('http://rruff.geo.arizona.edu/AMS/minerals/%FILE').split(\"viewJmol('\")[%n].split(\"'\")[1]+'_cif.txt' + -- for example, see http://rruff.geo.arizona.edu/AMS/viewJmol.php?id=19280 + +bug fix: files with names containing "[]" cannot be loaded. +bug fix: print {cell=555}.find("cellFormula") can fail because of 2% slop involved in defining cell=555 + +JmolVersion="14.5.0_2015.11.27" + bug fix: {atomset}.split() [split atomset by model] returns array of strings, not array of atoms code: BSUtil.cardinalityOf cleanup. Modified: trunk/Jmol/src/org/jmol/viewer/OutputManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/OutputManager.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/viewer/OutputManager.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -565,7 +565,7 @@ fileName = fullPath[0]; String pathName = (type.equals("FILE") ? vwr.fm.getFullPathName(false) : null); boolean getCurrentFile = (pathName != null && (pathName.equals("string") - || pathName.indexOf("[]") >= 0 || pathName.equals("JSNode"))); + || pathName.equals("String[]") || pathName.equals("JSNode"))); boolean asBytes = (pathName != null && !getCurrentFile); if (asBytes) { pathName = vwr.getModelSetPathName(); Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -139,8 +139,9 @@ * * The JmolViewer runs on Java 1.5+ virtual machines. The 3d graphics rendering * package is a software implementation of a z-buffer. It does not use Java3D - * and does not use Graphics2D from Java 1.2. + * and does not use Graphics2D from Java 1.2. " * + * * public here is a test for applet-applet and JS-applet communication the idea * being that applet.getProperty("jmolViewer") returns this Viewer object, * allowing direct inter-process access to public methods. @@ -1851,7 +1852,7 @@ Map<String, Object> htParams, SB loadScript) { if (fileName == null) return null; - if (fileName.indexOf("[]") >= 0) { + if (fileName.equals("String[]")) { // no reloading of string[] or file[] data -- just too complicated return null; } @@ -1863,7 +1864,7 @@ boolean haveFileData = (htParams.containsKey("fileData")); if (fileName.indexOf('$') == 0) htParams.put("smilesString", fileName.substring(1)); - boolean isString = (fileName.equalsIgnoreCase("string") || fileName + boolean isString = (fileName.equals("string") || fileName .equals(JC.MODELKIT_ZAP_TITLE)); String strModel = null; if (haveFileData) { @@ -2287,7 +2288,7 @@ String filename = fm.getFullPathName(false); if (filename.equals("string") || filename.equals(JC.MODELKIT_ZAP_TITLE)) return ms.getInlineData(am.cmi); - if (filename.indexOf("[]") >= 0) + if (filename.equals("String[]")) return filename; if (filename == "JSNode") return "<DOM NODE>"; @@ -3906,7 +3907,9 @@ int pt = f.indexOf("/"); String database = f.substring(0, pt); f = g.resolveDataBase(database, f.substring(pt + 1), null); - return (f == null ? name : f); + if (f != null && f.startsWith("'")) + f = evaluateExpression(f).toString(); + return (f == null || f.length() == 0 ? name : f); } catch (Exception e) { return name; } Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2015-11-27 11:57:16 UTC (rev 20869) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2015-11-29 22:18:42 UTC (rev 20870) @@ -1576,7 +1576,7 @@ static final String chemFileProperty = "chemFile"; void notifyFileOpen(String fullPathName, String title) { - if (fullPathName == null || !fullPathName.equals("file[]")) { + if (fullPathName == null || !fullPathName.equals("String[]")) { int pt = (fullPathName == null ? -1 : fullPathName.lastIndexOf("|")); if (pt > 0) fullPathName = fullPathName.substring(0, pt); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2016-02-06 16:19:41
|
Revision: 20950 http://sourceforge.net/p/jmol/code/20950 Author: hansonr Date: 2016-02-06 16:19:38 +0000 (Sat, 06 Feb 2016) Log Message: ----------- Jmol.___JmolVersion="14.5.2_2016.02.06" new feature: isosurface BACKSHELL -- displays just the back side of an isosurface -- works by reversing the normals, then showing front only -- similar to isosurface slab 50, but better if object is far from spherical -- works with PMESH, MO, CONTACT as well -- reverted using isosurface NBACKSHELL bug fix: small MRC map files mistaken for DELPHI files. bug fix: MRC/CCP4 surface/map files still sometimes inside out. Modified Paths: -------------- trunk/Jmol/src/org/jmol/quantum/NciCalculation.java trunk/Jmol/src/org/jmol/quantum/QuantumCalculation.java trunk/Jmol/src/org/jmol/render/MeshRenderer.java trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java trunk/Jmol/src/org/jmol/script/ScriptEval.java trunk/Jmol/src/org/jmol/script/T.java trunk/Jmol/src/org/jmol/shape/Mesh.java trunk/Jmol/src/org/jmol/shape/MeshCollection.java trunk/Jmol/src/org/jmol/shapesurface/Contact.java trunk/Jmol/src/org/jmol/shapesurface/MolecularOrbital.java trunk/Jmol/src/org/jmol/util/MeshSlicer.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/openscience/jmol/app/surfacetool/SurfaceStatus.java Modified: trunk/Jmol/src/org/jmol/quantum/NciCalculation.java =================================================================== --- trunk/Jmol/src/org/jmol/quantum/NciCalculation.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/quantum/NciCalculation.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -29,6 +29,7 @@ import org.jmol.java.BS; import org.jmol.jvxl.data.VolumeData; +import org.jmol.modelset.Atom; import org.jmol.util.BSUtil; import org.jmol.util.Escape; import org.jmol.util.Logger; Modified: trunk/Jmol/src/org/jmol/quantum/QuantumCalculation.java =================================================================== --- trunk/Jmol/src/org/jmol/quantum/QuantumCalculation.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/quantum/QuantumCalculation.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -130,6 +130,8 @@ // all coordinates come in as angstroms, not bohr, and are converted here into bohr + if (atoms == null) + atoms = (Atom[]) xyz; if (points == null) { volume = 1; for (int i = 3; --i >= 0;) { Modified: trunk/Jmol/src/org/jmol/render/MeshRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/render/MeshRenderer.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/render/MeshRenderer.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -62,6 +62,7 @@ protected boolean isTranslucent; protected boolean frontOnly; + protected boolean isShell; protected boolean antialias; protected boolean haveBsDisplay; protected boolean selectedPolyOnly; @@ -216,16 +217,18 @@ : selectedPolyOnly ? mesh.bsSlabDisplay : null); renderLow = (!isExport && !vwr.checkMotionRendering(T.mesh)); - frontOnly = renderLow || !tm.slabEnabled && mesh.frontOnly + boolean allowFrontOnly = (!tm.slabEnabled && !mesh.isTwoSided && !selectedPolyOnly - && (meshSlabValue == Integer.MIN_VALUE || meshSlabValue >= 100); + && (meshSlabValue == Integer.MIN_VALUE || meshSlabValue >= 100)); + frontOnly = renderLow || mesh.frontOnly && allowFrontOnly; + isShell = mesh.isShell && allowFrontOnly; screens = vwr.allocTempScreens(vertexCount); if (isPrecision) p3Screens = vwr.allocTempPoints(vertexCount); - if (frontOnly) + if (frontOnly || isShell) transformedVectors = vwr.gdata.getTransformedVertexVectors(); if (transformedVectors == null) - frontOnly = false; + frontOnly = isShell = false; } return true; } @@ -329,6 +332,7 @@ if (isTranslucentInherit) colix = C.copyColixTranslucency(mesh.slabColix, mesh.colix); g3d.setC(colix); + // isShell??? if (generateSet) { if (frontOnly && fill) frontOnly = false; @@ -384,7 +388,7 @@ short nA = normixes[iA]; short nB = normixes[iB]; short nC = normixes[iC]; - check = checkNormals(nA, nB, nC); + check = (frontOnly || isShell ? checkFront(nA, nB, nC) : 7); if (fill && check != 7) continue; switch (polygon.length) { @@ -486,16 +490,14 @@ screenA.y, screenA.z, screenC.x, screenC.y, screenC.z); } - protected int checkNormals(short nA, short nB, short nC) { + protected int checkFront(short nA, short nB, short nC) { int check = 7; - if (frontOnly) { - if (transformedVectors[nA].z < 0) - check ^= 1; - if (transformedVectors[nB].z < 0) - check ^= 2; - if (transformedVectors[nC].z < 0) - check ^= 4; - } + if (transformedVectors[nA].z < 0) + check ^= 1; + if (transformedVectors[nB].z < 0) + check ^= 2; + if (transformedVectors[nC].z < 0) + check ^= 4; return check; } Modified: trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -161,6 +161,7 @@ volumeRender = (imesh.jvxlData.colorDensity && imesh.jvxlData.allowVolumeRender); int thisSlabValue = mySlabValue; frontOnly = mesh.frontOnly || shapeID == JC.SHAPE_LCAOCARTOON; + isShell = mesh.isShell && shapeID != JC.SHAPE_LCAOCARTOON; if (!isNavigationMode) { meshSlabValue = imesh.jvxlData.slabValue; if (meshSlabValue != Integer.MIN_VALUE @@ -178,9 +179,11 @@ } thisSlabValue = Math.round(z0 + (z1 - z0) * (100f - meshSlabValue)/100); frontOnly &= (meshSlabValue >= 100); + isShell &= (meshSlabValue >= 100); } } boolean tCover = vwr.gdata.translucentCoverOnly; + // isShell?? vwr.gdata.translucentCoverOnly = (frontOnly || !vwr.getBoolean(T.translucent)); thePlane = imesh.jvxlData.jvxlPlane; vertexValues = mesh.vvs; @@ -292,7 +295,7 @@ int diam; if (mesh.diameter <= 0) { diam = vwr.getInt(T.dotscale); - frontOnly = false; + frontOnly = isShell = false; } else { diam = vwr.getScreenDim() / (volumeRender ? 50 : 100); } @@ -368,6 +371,7 @@ colix = C.copyColixTranslucency(mesh.slabColix, mesh.colix); g3d.setC(colix); boolean generateSet = isExport; + // isShell??? if (generateSet) { if (frontOnly && fill) frontOnly = false; @@ -418,7 +422,7 @@ short nA = normixes[iA]; short nB = normixes[iB]; short nC = normixes[iC]; - int check = checkNormals(nA, nB, nC); + int check = (frontOnly || isShell ? checkFront(nA, nB, nC) : 7); if (fill && check == 0) continue; short colixA, colixB, colixC; Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEval.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/script/ScriptEval.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -8879,6 +8879,8 @@ case T.nomesh: case T.fill: case T.nofill: + case T.backshell: + case T.nobackshell: case T.triangles: case T.notriangles: case T.frontonly: Modified: trunk/Jmol/src/org/jmol/script/T.java =================================================================== --- trunk/Jmol/src/org/jmol/script/T.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/script/T.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -1110,11 +1110,12 @@ public final static int auto = misc | 28; public final static int axis = misc | 30; public final static int babel = misc | 32; - public final static int babel21 = misc | 34; - public final static int back = misc | 35; - public final static int balls = misc | 36; - public final static int barb = misc | 37; - public final static int backlit = misc | 38; + public final static int babel21 = misc | 33; + public final static int back = misc | 34; + public final static int balls = misc | 35; + public final static int barb = misc | 36; + public final static int backlit = misc | 37; + public final static int backshell = misc | 38; public final static int best = misc | 39; public final static int basepair = misc | 40; public final static int binary = misc | 42; @@ -1228,21 +1229,22 @@ public final static int msms = misc | 210; public final static int name = misc | 211; public final static int nci = misc | 212; - public final static int next = misc | 213; + public final static int next = misc | 213; public final static int nmr = misc | 214; public final static int nocontourlines = misc | 215; public final static int nocross = misc | 216; public final static int nodebug = misc | 217; - public final static int nodots = misc | 218; + public final static int nodots = misc | 218; public final static int noedges = misc | 220; - public final static int nofill = misc | 222; + public final static int nofill = misc | 222; public final static int nohead = misc | 224; public final static int noload = misc | 226; - public final static int nomesh = misc | 228; + public final static int nomesh = misc | 228; public final static int noplane = misc | 230; public final static int normal = misc | 232; - public final static int notfrontonly = misc | 234; - public final static int notriangles = misc | 236; + public final static int nobackshell = misc | 233; + public final static int notfrontonly = misc | 234; + public final static int notriangles = misc | 236; public final static int obj = misc | 238; public final static int object = misc | 240; public final static int offset = misc | 242; @@ -1264,22 +1266,22 @@ public final static int period = misc | 266; public final static int perpendicular = misc | 268; public final static int phase = misc | 270; - public final static int play = misc | 272; - public final static int playrev = misc | 274; + public final static int play = misc | 272; + public final static int playrev = misc | 274; public final static int planarparam = misc | 275; public final static int pocket = misc | 276; public final static int pointsperangstrom = misc | 280; public final static int polygon = misc | 282; - public final static int prev = misc | 284; - public final static int probe = misc | 285; - public final static int pymol = misc | 286; + public final static int prev = misc | 284; + public final static int probe = misc | 285; + public final static int pymol = misc | 286; public final static int rad = misc | 287; public final static int radical = misc | 288; - public final static int range = misc | 290; - public final static int rasmol = misc | 292; + public final static int range = misc | 290; + public final static int rasmol = misc | 292; public final static int reference = misc | 294; public final static int remove = misc | 295; - public final static int residue = misc | 296; + public final static int residue = misc | 296; public final static int resolution = misc | 298; public final static int reversecolor = misc | 300; public final static int rewind = misc | 301; @@ -1288,7 +1290,7 @@ public final static int rna3d = misc | 304; public final static int rock = misc | 305; public final static int rotate45 = misc | 306; - public final static int rotation = misc | 308; + public final static int rotation = misc | 308; public final static int rubberband = misc | 310; public final static int sasurface = misc | 311; public final static int saved = misc | 312; @@ -1301,7 +1303,7 @@ public final static int silent = misc | 324; public final static int solid = misc | 326; public final static int spacegroup = misc | 328; - public final static int sphere = misc | 330; + public final static int sphere = misc | 330; public final static int squared = misc | 332; public final static int state = misc | 334; public final static int stdinchi = misc | 335; @@ -1315,17 +1317,17 @@ public final static int top = misc | 348; public final static int torsion = misc | 350; public final static int transform = misc | 352; - public final static int translation = misc | 354; - public final static int triangles = misc | 358; - public final static int url = misc | 360; - public final static int user = misc | 362; - public final static int val = misc | 364; - public final static int validation = misc | 365; - public final static int variable = misc | 366; - public final static int variables = misc | 368; - public final static int vertices = misc | 370; - public final static int spacebeforesquare = misc | 371; - public final static int width = misc | 372; + public final static int translation = misc | 354; + public final static int triangles = misc | 358; + public final static int url = misc | 360; + public final static int user = misc | 362; + public final static int val = misc | 364; + public final static int validation = misc | 365; + public final static int variable = misc | 366; + public final static int variables = misc | 368; + public final static int vertices = misc | 370; + public final static int spacebeforesquare = misc | 371; + public final static int width = misc | 372; // used to be "expression": @@ -1905,6 +1907,7 @@ "babel21", "back", "backlit", + "backshell", "balls", "baseModel", "best", @@ -2050,6 +2053,7 @@ "null", "inherit", "normal", + "noBackshell", "noContourLines", "notFrontOnly", "noTriangles", @@ -2938,6 +2942,7 @@ babel21, // "babel21" back, // "back" backlit, // "backlit" + backshell, // "backshell" balls, // "balls" basemodel, // "baseModel" best, // "best" @@ -3083,6 +3088,7 @@ -1, // "null" -1, // "inherit" normal, // "normal" + nobackshell, // "nobackshell" nocontourlines, // "noContourLines" notfrontonly, // "notFrontOnly" notriangles, // "noTriangles" Modified: trunk/Jmol/src/org/jmol/shape/Mesh.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Mesh.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/shape/Mesh.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -99,6 +99,8 @@ public int visibilityFlags; public boolean insideOut; public int checkByteCount; + private boolean normalsInverted; + public void setVisibilityFlags(int n) { visibilityFlags = n;//set to 1 in mps @@ -110,6 +112,7 @@ public boolean fillTriangles = true; public boolean showTriangles = false; //as distinct entitities public boolean frontOnly = false; + public boolean isShell = false; public boolean isTwoSided = true; public boolean havePlanarContours = false; @@ -161,6 +164,7 @@ drawTriangles = false; fillTriangles = true; frontOnly = false; + isShell = false; havePlanarContours = false; haveXyPoints = false; isModelConnected = false; @@ -190,7 +194,7 @@ } protected BS bsTemp; - + public void initialize(int lighting, T3[] vertices, P4 plane) { if (vertices == null) vertices = this.vs; @@ -199,6 +203,8 @@ this.lighting = T.frontlit; if (insideOut) invertNormixes(); + if (isShell && !isTwoSided) + invertNormixes(); setLighting(lighting); } @@ -214,7 +220,7 @@ else for (int i = normixCount; --i >= 0;) normixes[i] = Normix.getNormixV(normals[i], bsTemp); - return normixes; + return normixes; } public V3[] getNormals(T3[] vertices, P4 plane) { @@ -256,6 +262,7 @@ private void invertNormixes() { Normix.setInverseNormixes(); + normalsInverted = !normalsInverted; for (int i = normixCount; --i >= 0;) normixes[i] = Normix.getInverseNormix(normixes[i]); } @@ -357,6 +364,8 @@ if (showTriangles) s.append(" triangles"); s.append(" ").append(T.nameOf(lighting)); + if (isShell && !isTwoSided) + s.append(" shell"); return s.toString(); } @@ -447,30 +456,38 @@ } return bs; } -// -// BS getVisibleGhostBitSet() { -// BS bs = new BS(); -// if (polygonCount == 0 && bsSlabGhost != null) -// BSUtil.copy2(bsSlabGhost, bs); -// else -// for (int i = polygonCount; --i >= 0;) -// if (bsSlabGhost == null || bsSlabGhost.get(i)) { -// int[] vertexIndexes = polygonIndexes[i]; -// if (vertexIndexes == null) -// continue; -// bs.set(vertexIndexes[0]); -// bs.set(vertexIndexes[1]); -// bs.set(vertexIndexes[2]); -// } -// return bs; -// } + // + // BS getVisibleGhostBitSet() { + // BS bs = new BS(); + // if (polygonCount == 0 && bsSlabGhost != null) + // BSUtil.copy2(bsSlabGhost, bs); + // else + // for (int i = polygonCount; --i >= 0;) + // if (bsSlabGhost == null || bsSlabGhost.get(i)) { + // int[] vertexIndexes = polygonIndexes[i]; + // if (vertexIndexes == null) + // continue; + // bs.set(vertexIndexes[0]); + // bs.set(vertexIndexes[1]); + // bs.set(vertexIndexes[2]); + // } + // return bs; + // } + public void setTokenProperty(int tokProp, boolean bProp) { switch (tokProp) { case T.notfrontonly: case T.frontonly: frontOnly = (tokProp == T.frontonly ? bProp : !bProp); return; + case T.nobackshell: + case T.backshell: + if (!isTwoSided && isShell != (tokProp == T.backshell ? bProp : !bProp)) { + isShell = !isShell; + invertNormixes(); + } + return; case T.frontlit: case T.backlit: case T.fullylit: @@ -478,23 +495,23 @@ return; case T.nodots: case T.dots: - showPoints = (tokProp == T.dots ? bProp : !bProp); + showPoints = (tokProp == T.dots ? bProp : !bProp); return; case T.nomesh: case T.mesh: - drawTriangles = (tokProp == T.mesh ? bProp : !bProp); + drawTriangles = (tokProp == T.mesh ? bProp : !bProp); return; case T.nofill: case T.fill: - fillTriangles = (tokProp == T.fill ? bProp : !bProp); + fillTriangles = (tokProp == T.fill ? bProp : !bProp); return; case T.notriangles: case T.triangles: - showTriangles = (tokProp == T.triangles ? bProp : !bProp); + showTriangles = (tokProp == T.triangles ? bProp : !bProp); return; case T.nocontourlines: case T.contourlines: - showContourLines = (tokProp == T.contourlines ? bProp : !bProp); + showContourLines = (tokProp == T.contourlines ? bProp : !bProp); return; } } Modified: trunk/Jmol/src/org/jmol/shape/MeshCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/MeshCollection.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/shape/MeshCollection.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -273,6 +273,7 @@ case T.fullylit: case T.dots: case T.fill: + case T.backshell: case T.triangles: case T.frontonly: break; @@ -305,6 +306,10 @@ test = false; tok = T.fill; break; + case T.nobackshell: + test = false; + tok = T.backshell; + break; case T.notriangles: test = false; tok = T.triangles; Modified: trunk/Jmol/src/org/jmol/shapesurface/Contact.java =================================================================== --- trunk/Jmol/src/org/jmol/shapesurface/Contact.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/shapesurface/Contact.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -142,6 +142,7 @@ thisMesh.nSets = 0; thisMesh.info = null; String func = null; + boolean fullyLit = true; switch (displayType) { case T.full: func = "(a>b?a:b)"; @@ -157,7 +158,7 @@ //VolumeData volumeData; switch (displayType) { case T.nci: - colorByType = false; + colorByType = fullyLit = false; bs = BSUtil.copy(bsA); bs.or(bsB); // for now -- TODO -- need to distinguish ligand if (parameters[0] < 0) @@ -170,13 +171,13 @@ break; case T.sasurface: case T.surface: - colorByType = false; + colorByType = fullyLit = false; thisMesh.nSets = 1; newSurface(T.surface, null, bsA, bsB, rd, null, null, colorDensity, null, saProbeRadius); break; case T.cap: - colorByType = false; + colorByType = fullyLit = false; thisMesh.nSets = 1; newSurface(T.slab, null, bsA, bsB, rd, null, null, false, null, 0); sg.initState(); @@ -230,7 +231,7 @@ if (colorDensity) { setPropI("pointSize", Float.valueOf(ptSize), null); } else { - setPropI("token", Integer.valueOf(T.fullylit), null); + setPropI("token", Integer.valueOf(fullyLit ? T.fullylit : T.frontlit), null); } if (thisMesh.slabOptions != null) { thisMesh.slabOptions = null; Modified: trunk/Jmol/src/org/jmol/shapesurface/MolecularOrbital.java =================================================================== --- trunk/Jmol/src/org/jmol/shapesurface/MolecularOrbital.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/shapesurface/MolecularOrbital.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -70,6 +70,7 @@ private int moMesh = T.mesh; private int moDots = T.nodots; private int moFrontOnly = T.frontonly; + private int moShell = T.nobackshell; private String moTitleFormat; private boolean moDebug; private int myColorPt; @@ -290,6 +291,10 @@ case T.nomesh: moMesh = tok; break; + case T.backshell: + case T.nobackshell: + moShell = tok; + break; case T.frontonly: case T.notfrontonly: moFrontOnly = tok; @@ -517,6 +522,7 @@ setPropI("translucency", moTranslucency, null); setPropI("token", Integer.valueOf(moFill), null); setPropI("token", Integer.valueOf(moMesh), null); + setPropI("token", Integer.valueOf(moShell), null); setPropI("token", Integer.valueOf(moDots), null); setPropI("token", Integer.valueOf(moFrontOnly), null); thisModel.put("mesh", currentMesh); Modified: trunk/Jmol/src/org/jmol/util/MeshSlicer.java =================================================================== --- trunk/Jmol/src/org/jmol/util/MeshSlicer.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/util/MeshSlicer.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -71,8 +71,10 @@ m.bsSlabGhost = null; m.slabMeshType = T.none; } - if (slabType == T.none) + if (slabType == T.none) { + return false; + } } Object slabbingObject = slabObject[1]; boolean andCap = ((Boolean) slabObject[2]).booleanValue() Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2016-02-06 16:19:38 UTC (rev 20950) @@ -66,6 +66,13 @@ Jmol.___JmolVersion="14.5.2_2016.02.06" +new feature: isosurface BACKSHELL + -- displays just the back side of an isosurface + -- works by reversing the normals, then showing front only + -- similar to isosurface slab 50, but better if object is far from spherical + -- works with PMESH, MO, CONTACT as well + -- reverted using isosurface NBACKSHELL + bug fix: small MRC map files mistaken for DELPHI files. bug fix: MRC/CCP4 surface/map files still sometimes inside out. Modified: trunk/Jmol/src/org/openscience/jmol/app/surfacetool/SurfaceStatus.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/surfacetool/SurfaceStatus.java 2016-02-06 06:22:35 UTC (rev 20949) +++ trunk/Jmol/src/org/openscience/jmol/app/surfacetool/SurfaceStatus.java 2016-02-06 16:19:38 UTC (rev 20950) @@ -48,6 +48,7 @@ boolean ghostOn; boolean foundDuringLastSync; Slice slice; + private boolean isShell; /** * @param m @@ -67,6 +68,7 @@ meshTranslucency = 0; //ignored for now lighting = m.lighting; frontonly = m.frontOnly; + isShell = m.isShell; beenSliced = false; capOn = false; ghostOn = false; @@ -84,6 +86,7 @@ meshTranslucency = 0; //ignored for now lighting = m.lighting; frontonly = m.frontOnly; + isShell = m.isShell; foundDuringLastSync = true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2016-06-27 05:31:33
|
Revision: 21162 http://sourceforge.net/p/jmol/code/21162 Author: hansonr Date: 2016-06-27 05:31:30 +0000 (Mon, 27 Jun 2016) Log Message: ----------- Jmol.___JmolVersion="14.7.0_2016.06.27" new feature: load AUDIO audiofilename -- applet can read WAV, MP3, and OGG files -- application can read WAV files] Modified Paths: -------------- trunk/Jmol/src/org/jmol/applet/Jmol.java trunk/Jmol/src/org/jmol/appletjs/Jmol.java trunk/Jmol/src/org/jmol/script/ScriptCompiler.java trunk/Jmol/src/org/jmol/script/ScriptEval.java trunk/Jmol/src/org/jmol/script/T.java trunk/Jmol/src/org/jmol/util/GenericApplet.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/StatusManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java Modified: trunk/Jmol/src/org/jmol/applet/Jmol.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Jmol.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/applet/Jmol.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -157,6 +157,7 @@ public Jmol() { // } + /* * see below public String getAppletInfo() { return appletInfo; } * @@ -296,7 +297,7 @@ + haveDocumentAccess); } } - cleanRegistry(); + cleanRegistry(); } private void addValue(Map<String, Object> info, String key, String putKey, @@ -363,7 +364,7 @@ } } } - + @Override protected String getJmolParameter(String paramName) { return applet.getParameter(paramName); @@ -672,11 +673,11 @@ protected void doShowStatus(String message) { try { System.out.println(message); - applet - .showStatus(PT.rep(PT.split(message, "\n")[0], "'", "\\'")); + applet.showStatus(PT.rep(PT.split(message, "\n")[0], "'", "\\'")); doSendJsTextStatus(message); } catch (Exception e) { //ignore if page is closing } } + } Modified: trunk/Jmol/src/org/jmol/appletjs/Jmol.java =================================================================== --- trunk/Jmol/src/org/jmol/appletjs/Jmol.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/appletjs/Jmol.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -361,4 +361,15 @@ jmol.resizeApplet(viewer.html5Applet, new int[] {width, height}); } + @Override + public void playAudio(String fileOrDataURI) { + + /** + * @j2sNative + * + * Jmol.playAudio(fileOrDataURI); + */ + {} + } + } Modified: trunk/Jmol/src/org/jmol/script/ScriptCompiler.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptCompiler.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/script/ScriptCompiler.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -1230,6 +1230,7 @@ case T.smiles: case T.trajectory: case T.async: + case T.audio: addTokenToPrefix(token); break; default: Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEval.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/script/ScriptEval.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -4277,6 +4277,10 @@ modelName = optParameterAsString(++i); tok = T.getTokFromName(modelName); break; + case T.audio: + if (!chk) + vwr.playAudio(optParameterAsString(++i)); + return; case T.identifier: i++; loadScript.append(" " + modelName); Modified: trunk/Jmol/src/org/jmol/script/T.java =================================================================== --- trunk/Jmol/src/org/jmol/script/T.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/script/T.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -1112,6 +1112,8 @@ public final static int as = misc | 24; // for LOAD and ISOSURFACE only public final static int async = misc | 25; public final static int atomicorbital = misc | 26; + public final static int audio = misc | 27; + public final static int auto = misc | 28; public final static int axis = misc | 30; public final static int babel = misc | 32; @@ -2186,6 +2188,7 @@ "aromatic", "arrow", "async", + "audio", "auto", "axis", "barb", @@ -3227,6 +3230,7 @@ aromatic, // "aromatic" arrow, // "arrow" async, // "async" + audio, // "audio" auto, // "auto" axis, // "axis" barb, // "barb" Modified: trunk/Jmol/src/org/jmol/util/GenericApplet.java =================================================================== --- trunk/Jmol/src/org/jmol/util/GenericApplet.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/util/GenericApplet.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -764,6 +764,11 @@ private String sendScript(String script, String appletName, boolean isSync, boolean doCallback) { + if ("audio:" == appletName) { + playAudio(script); + return ""; + } + if (doCallback) { script = notifySync(script, appletName); // if the notified JavaScript function returns "" or 0, then @@ -814,6 +819,17 @@ return (isSync ? "" : sb.toString()); } + public void playAudio(String fileOrDataURI) { + /** + * @j2sNative + * + * Jmol._playAudio(fileNameOrDataURI); + */ + { + eval("Jmol._playAudio(" + PT.esc(fileOrDataURI)); + } + } + private String notifySync(String info, String appletName) { String syncCallback = callbacks.get(CBK.SYNC); if (!mayScript || syncCallback == null) Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2016-06-27 05:31:30 UTC (rev 21162) @@ -46,9 +46,16 @@ -- sets the echo offset to a specific screen pixel offset -- TODO not saved in state +Jmol.___JmolVersion="14.7.0_2016.06.27" -Jmol.___JmolVersion="14.7.0_2016.06.23" +new feature: load AUDIO audiofilename + -- applet can read WAV, MP3, and OGG files + -- application can read WAV files] + + +JmolVersion="14.7.0_2016.06.23" + bug fix: nn.? and nn.* are not processed properly as float nn. For example: print (35 == 35.? "yes" : "no") cause script exception Modified: trunk/Jmol/src/org/jmol/viewer/StatusManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StatusManager.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/viewer/StatusManager.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -625,6 +625,11 @@ } } + + public void playAudio(String fileNameOrDataURI) { + syncSend(fileNameOrDataURI, "audio:", -1); + } + public Object syncSend(String script, Object appletNameOrProp, int port) { // no jmolscript option for syncSend if (port != 0 || notifyEnabled(CBK.SYNC)) { @@ -782,5 +787,6 @@ .resizeInnerPanel("preferredWidthHeight " + width + " " + height + ";")); } + } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -9442,4 +9442,8 @@ .getUtil("Triangulator", this, "script")) : triangulator); } + public void playAudio(String fileNameOrDataURI) { + sm.playAudio(fileNameOrDataURI); + } + } Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java 2016-06-23 23:04:26 UTC (rev 21161) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java 2016-06-27 05:31:30 UTC (rev 21162) @@ -46,6 +46,10 @@ import org.openscience.jmol.app.jmolpanel.console.AppConsole; import org.openscience.jmol.app.webexport.WebExport; +import sun.audio.AudioData; +import sun.audio.AudioDataStream; +import sun.audio.AudioPlayer; + class StatusListener implements JmolStatusListener, JmolSyncInterface, JSVInterface { /* @@ -210,6 +214,10 @@ break; case SYNC: //System.out.println("StatusListener sync; " + strInfo); + if ("audio:" == data[2]) { + playAudio(strInfo); + return; + } String lc = (strInfo == null ? "" : strInfo.toLowerCase()); if (lc.startsWith("jspecview")) { setJSpecView(strInfo.substring(9).trim(), false, false); @@ -250,6 +258,23 @@ /** + * WAV only for application + * + * @param fileName + */ + private void playAudio(String fileName) { + try { + Object ret = vwr.fm.getFileAsBytes(fileName, null); + if (ret == null || ret instanceof String) { + return; + } + AudioPlayer.player.start(new AudioDataStream(new AudioData((byte[]) ret))); + } catch (Exception e) { + Logger.info(e.getMessage()); + } + } + + /** * @param atomIndex * @param modelIndex * @param mode This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-24 06:05:20
|
Revision: 21333 http://sourceforge.net/p/jmol/code/21333 Author: hansonr Date: 2017-01-24 06:05:17 +0000 (Tue, 24 Jan 2017) Log Message: ----------- Jmol.___JmolVersion="14.8.2-beta-2017-01-24" bug fix: NBO viewer upgrade bug fix: GenNBO reader not recognizing FILTER "BETA" Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialog.java trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogConfig.java trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogModel.java trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogRun.java trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogSearch.java trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogView.java trunk/Jmol/src/org/openscience/jmol/app/nbo/NBOFileHandler.java trunk/Jmol/src/org/openscience/jmol/app/nbo/NBOService.java Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-01-24 06:05:17 UTC (rev 21333) @@ -49,10 +49,12 @@ # 10. Run jmol/tools build-release.xml # -Jmol.___JmolVersion="14.8.2" +Jmol.___JmolVersion="14.8.2-beta-2017-01-24" +bug fix: NBO viewer upgrade bug fix: GenNBO reader not recognizing FILTER "BETA" + JmolVersion="14.8.1" bug fix: isosurface color "user" as an equivalent to isosurface colorscheme "user" broken Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialog.java 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialog.java 2017-01-24 06:05:17 UTC (rev 21333) @@ -610,7 +610,7 @@ public void close() { if(modulePanel != null) inputFileHandler.clearInputFile(); - runScriptQueued("mo delete; nbo delete; select off"); + runScriptNow("mo delete; nbo delete; select off"); dispose(); } @@ -632,8 +632,7 @@ return; } } - if (false) - runScriptQueued("zap"); // BH ?? + // runScriptNow("zap"); // BH why?? nboService.restart(); if (dialogMode == DIALOG_HOME) { remove(homePanel); @@ -644,7 +643,7 @@ switch (dialogMode) { case DIALOG_VIEW: case DIALOG_SEARCH: - runScriptQueued("mo delete; nbo delete; select off"); + runScriptNow("mo delete; nbo delete; select off"); break; } nboService.jobQueue.clear(); @@ -755,7 +754,7 @@ if (vwr.ms.ac == 0) return; if (nboView) - runScriptQueued("select add {*}.bonds;color bonds lightgrey;" + + runScriptNow("select add {*}.bonds;color bonds lightgrey;" + "wireframe 0.1;select remove {*}"); switch (dialogMode) { case DIALOG_MODEL: @@ -810,8 +809,7 @@ public void setStatus(String statusInfo) { if (statusInfo.length() > 0) - log(statusInfo, 'b'); - + log(statusInfo, 'p'); statusLab.setText(statusInfo); } @@ -826,7 +824,7 @@ String id = "id " + PT.esc(title.toString().trim()); String script = "image " + id + " close;image id \"\" " + PT.esc(f.toString().replace('\\', '/')); - runScriptQueued(script); + runScriptNow(script); break; case NBOService.MODE_RUN: inputFileHandler.setInputFile(inputFileHandler.inputFile); Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogConfig.java 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogConfig.java 2017-01-24 06:05:17 UTC (rev 21333) @@ -193,10 +193,7 @@ jCheckSelHalo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (!((JCheckBox) e.getSource()).isSelected()) - runScriptQueued("select off"); - else - runScriptQueued("select on"); + runScriptNow("select " + ((JCheckBox) e.getSource()).isSelected()); } }); jCheckSelHalo.doClick(); @@ -210,11 +207,8 @@ orbColor1 = new Color(Integer.parseInt(toks[0])); orbColor2 = new Color(Integer.parseInt(toks[1])); opacityOp = Float.parseFloat(toks[2]); - if (toks[3].contains("true")) { - useWireMesh = true; - runScriptQueued("nbo nofill mesh"); - } else - runScriptQueued("nbo fill nomesh"); + useWireMesh = toks[3].contains("true"); + runScriptNow("nbo " + (useWireMesh ? "nofill mesh" : "fill nomesh")); } else { orbColor1 = Color.cyan; orbColor2 = Color.yellow; @@ -250,7 +244,7 @@ orbColor1 = ((Color) colorBox1.getSelectedItem()); color1 = "[" + orbColor1.getRed() + " " + orbColor1.getGreen() + " " + orbColor1.getBlue() + "]"; - runScriptQueued("nbo color " + color2 + " " + color1 + ";mo color " + runScriptNow("nbo color " + color2 + " " + color1 + ";mo color " + color2 + " " + color1); java.util.Properties props = new java.util.Properties(); props.setProperty("viewOptions", @@ -268,7 +262,7 @@ orbColor2 = ((Color) colorBox2.getSelectedItem()); color2 = "[" + orbColor2.getRed() + " " + orbColor2.getGreen() + " " + orbColor2.getBlue() + "]"; - runScriptQueued("nbo color " + color2 + " " + color1 + ";mo color " + runScriptNow("nbo color " + color2 + " " + color1 + ";mo color " + color2 + " " + color1); java.util.Properties props = new java.util.Properties(); props.setProperty("viewOptions", @@ -301,7 +295,7 @@ @Override public void stateChanged(ChangeEvent e) { opacityOp = (float) opacity.getValue() / 10; - runScriptQueued("nbo translucent " + opacityOp + ";mo translucent " + runScriptNow("nbo translucent " + opacityOp + ";mo translucent " + opacityOp); java.util.Properties props = new java.util.Properties(); props.setProperty("viewOptions", @@ -322,9 +316,9 @@ useWireMesh = !useWireMesh; if (useWireMesh) { opacity.setValue(0); - runScriptQueued("nbo nofill mesh;mo nofill mesh"); + runScriptNow("nbo nofill mesh;mo nofill mesh"); } else - runScriptQueued("nbo fill nomesh;mo fill nomesh"); + runScriptNow("nbo fill nomesh;mo fill nomesh"); java.util.Properties props = new java.util.Properties(); props.setProperty("viewOptions", orbColor1.getRGB() + "," + orbColor2.getRGB() + "," + opacityOp @@ -490,8 +484,7 @@ } catch (IOException e) { alertError("Atom colors not found"); } - runScriptNow(atomColors); - runScriptQueued("refresh"); + runScriptNow(atomColors + ";refresh"); } /** @@ -523,7 +516,7 @@ */ protected void showAtomNums(boolean alpha) { if (!showAtNum) { - runScriptQueued("select {*};label off; select remove {*}"); + runScriptNow("select {*};label off; select remove {*}"); return; } SB sb = new SB(); @@ -536,7 +529,7 @@ sb.append("select {H*};color labels " + color + ";" + "set labeloffset 0 0 {*}; select remove {*};"); - runScriptQueued(sb.toString()); + runScriptNow(sb.toString()); } // protected void rawCmd(String name, final String cmd, final int mode) { @@ -601,7 +594,7 @@ * p, b, r ("red"), i, etc. */ protected synchronized void log(String line, char chFormat) { - if (line.trim().equals("") || jpNBOLog == null || !debugVerbose && chFormat == 'i') + if (line.trim().equals("") || jpNBOLog == null || !debugVerbose && "b|r".indexOf("" + chFormat) < 0) return; if (line.trim().length() >= 1) { line = PT.rep(line.trim(), "<", "<"); @@ -635,7 +628,7 @@ protected void sendDefaultScript() { - runScriptQueued(DEFAULT_SCRIPT); + runScriptNow(DEFAULT_SCRIPT); } protected void runScriptQueued(String script) { @@ -787,6 +780,14 @@ runScriptQueued(s); } + protected void colorMeshes() { + runScriptNow((useWireMesh ? "nbo mesh nofill translucent " + opacityOp + + ";mo mesh nofill translucent " + opacityOp : + "nbo nomesh fill translucent " + opacityOp + + ";mo nomesh fill translucent " + opacityOp) + + ";nbo color " + color2 + " " + color1 + ";mo color " + color2 + " " + color1); + } + } Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogModel.java 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogModel.java 2017-01-24 06:05:17 UTC (rev 21333) @@ -186,7 +186,7 @@ p2.add(jtLineInput); p2.add(jrFileIn); p2.add(jComboUse); - addListenersAndSize(jComboUse, jrFileIn); + addFocusListeners(jComboUse, jrFileIn); inputBox.add(p2); inputFileHandler = new NBOFileHandler("", "", NBOFileHandler.MODE_MODEL_USE, INPUT_FILE_EXTENSIONS, @@ -230,6 +230,10 @@ return false; } }; + // BH adding focus for these as well + addFocusListeners(inputFileHandler.tfDir, jrFileIn); + addFocusListeners(inputFileHandler.tfExt, jrFileIn); + addFocusListeners(inputFileHandler.tfName, jrFileIn); inputBox.add(inputFileHandler); return inputBox; } @@ -557,21 +561,20 @@ String sel = ""; for (String x : s) sel += " " + (Integer.parseInt(x) - 1); - runScriptQueued("select on ({" + sel + " })"); + runScriptNow("select on ({" + sel + " })"); } private void createInput(final JTextField field, JRadioButton radio) { - field.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { getModelFromTextBox(field); } }); - addListenersAndSize(field, radio); + addFocusListeners(field, radio); } - private void addListenersAndSize(final JComponent field, + private void addFocusListeners(final JComponent field, final JRadioButton radio) { field.addFocusListener(new FocusListener() { @Override @@ -907,7 +910,7 @@ selected = (" " + selected).replace(" " + atomno + " ", " ").trim(); if (selected.length() > 0) selected += " "; - runScriptQueued("select remove {*}[" + atomno + "];measure off;"); + runScriptNow("select remove {*}[" + atomno + "];measure off;"); String[] split = selected.split(" "); for (int i = 0; i < atomNumBox.length; i++) atomNumBox[i].setText(i >= split.length ? "" : " " + split[i]); @@ -915,7 +918,7 @@ selected += atomno + " "; } - System.out.println(atomno + " / " + selected); + // System.out.println(atomno + " / " + selected); int cnt = (selected.equals("") ? 1 : selected.split(" ").length); switch (editMode) { case ALTER: @@ -938,14 +941,14 @@ break; case 2: desc = "distance: "; - runScriptQueued("measure off;measure " + selected + runScriptNow("measure off;measure " + selected + "\"2:%0.4VALUE //A\"" + ";measure " + selected + "\"2:%0.4VALUE //A\""); break; case 3: case 4: desc = (cnt == 3 ? "angle: " : "dihedral angle: "); - runScriptQueued("measure off;measure " + selected); + runScriptNow("measure off;measure " + selected); break; } if (script == null) { @@ -1016,7 +1019,7 @@ } if (cnt == 0 || isSelected) return; - runScriptQueued("select add {*}[" + atomno + "]"); + runScriptNow("select add {*}[" + atomno + "]"); atomNumBox[cnt - 1].setText(" " + atomno); } @@ -1033,13 +1036,9 @@ if (currVal != null) currVal.setText("atomic number: " + runScriptNow(script)); } else { - if (cnt == 2) { - runScriptQueued("measure off;measure " + selected - + "\"2:%0.4VALUE //A\"" + ";measure " + selected - + "\"2:%0.4VALUE //A\""); - } else { - runScriptQueued("measure off;measure " + selected + " "); - } + runScriptNow("measure off;measure " + selected + " " + (cnt == 2 ? + "\"2:%0.4VALUE //A\"" + ";measure " + selected + + "\"2:%0.4VALUE //A\"" :"")); script = "print measure({*}["; for (int i = 0; i < ats.length - 1; i++) script += ats[i] + "],{*}["; @@ -1087,7 +1086,7 @@ redo.setEnabled(true); else redo.setEnabled(false); - runScriptQueued("select none; select on;refresh"); + runScriptNow("select none; select on;refresh"); } protected void showConfirmationDialog(String st, File newFile, String ext) { @@ -1122,7 +1121,7 @@ s = s.replaceAll("\\\\", ""); if (statusInfo.indexOf("Editing") >= 0) s = "save orientation o1;" + s + ";restore orientation o1"; - runScriptQueued(s);// + ";rotate best;none; select on;"); + runScriptNow(s);// + ";rotate best;none; select on;"); } } Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogRun.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogRun.java 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogRun.java 2017-01-24 06:05:17 UTC (rev 21333) @@ -37,7 +37,6 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; -import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.Hashtable; @@ -74,9 +73,9 @@ } protected static boolean ALLOW_SELECT_ALL = false; - + protected static final String ARCHIVE_DIR = "http://nbo6.chem.wisc.edu/jmol_nborxiv/"; - + protected static final String RUN_EXTENSIONS = "47;gau;gms"; protected static final String[] keywordList = { @@ -115,11 +114,13 @@ //INPUT///////////////////////// if (inputFileHandler == null) { - inputFileHandler = new NBOFileHandler("", "47", NBOFileHandler.MODE_RUN, "47", (NBODialog) this); + inputFileHandler = new NBOFileHandler("", "47", NBOFileHandler.MODE_RUN, + "47", (NBODialog) this); inputFileHandler.browse.setEnabled(false); } else - inputFileHandler = new NBOFileHandler(inputFileHandler.jobStem, inputFileHandler.tfExt.getText(), - NBOFileHandler.MODE_RUN, "47", (NBODialog) this); + inputFileHandler = new NBOFileHandler(inputFileHandler.jobStem, + inputFileHandler.tfExt.getText(), NBOFileHandler.MODE_RUN, "47", + (NBODialog) this); inputFileHandler.browse.setEnabled(false); Box box = Box.createHorizontalBox(); @@ -196,7 +197,7 @@ @Override protected void showAtomNums(boolean alpha) { if (!showAtNum) { - runScriptQueued("select {*};label off; select remove {*}"); + runScriptNow("select {*};label off; select remove {*}"); return; } SB sb = new SB(); @@ -218,13 +219,11 @@ sb.append("%a;"); } } - runScriptQueued(sb.toString()); - sb = new SB(); String color = (nboView) ? "black" : "gray"; sb.append("select {*};color labels white;"); sb.append("select {H*};color labels " + color + ";" + "set labeloffset 0 0 {*}; select remove {*};"); - runScriptQueued(sb.toString()); + runScriptNow(sb.toString()); } @@ -241,9 +240,8 @@ //sList.addElement(s); tmp += s.toUpperCase() + " "; } - if (plotFileName != null) - if (plotFileName.getText().equals("")) - plotFileName.setText(inputFileHandler.jobStem); + if (plotFileName != null && plotFileName.getText().equals("")) + plotFileName.setText(inputFileHandler.jobStem); return tmp; } @@ -289,7 +287,7 @@ } if (nboView) { String s2 = runScriptNow("print {*}.bonds"); - runScriptQueued("select " + s2 + ";color bonds lightgrey"); + runScriptNow("select " + s2 + ";color bonds lightgrey"); } } @@ -587,22 +585,29 @@ nboKeywords = fileData[1]; } //Check the plot file names match job name, warn user otherwise - String jobName; - if (plotFileName == null) { - jobName = inputFileHandler.jobStem; - } else - jobName = plotFileName.getText().trim(); + inputFileHandler.jobStem = inputFileHandler.jobStem.trim(); + String jobName = (plotFileName == null ? inputFileHandler.jobStem + : plotFileName.getText().trim()); + // BH Q: Would it be reasonable if the NO option is chosen to put that other job name in to the jobStem field, and also copy the .47 file to that? Or use that? + // Or, would it be better to ask this question immediately upon file loading so that it doesn't come up, and make it so that + // you always MUST have these two the same? + if (!jobName.equals(inputFileHandler.jobStem)) { int i = JOptionPane .showConfirmDialog( null, - "Warning, plot files are being created with name " + "Warning! Plot files are being created with name \"" + jobName - + ".\nChange to match job name?\n(view will not work correctly if not)", + + "\", which does not match your file name \"" + + inputFileHandler.jobStem + + "\"\nDo you want to change that to \"" + + inputFileHandler.jobStem + + "\" so that all files related to this job are under the same name, and View will work correctly?", "Warning", JOptionPane.YES_NO_OPTION); + // BH adds setting of plotFileName if (i == JOptionPane.YES_OPTION) - jobName = inputFileHandler.jobStem; + plotFileName.setText(jobName = inputFileHandler.jobStem); } for (String x : keywords.split(" ")) { @@ -667,8 +672,8 @@ JTextPane tp = new JTextPane(); d.add(tp, BorderLayout.CENTER); d.setSize(new Dimension(500, 600)); - tp.setText(inputFileHandler.getFileData(NBOFileHandler.newNBOFile(newFile, "nbo") - .toString())); + tp.setText(inputFileHandler.getFileData(NBOFileHandler.newNBOFile( + newFile, "nbo").toString())); d.setVisible(true); } } @@ -679,8 +684,6 @@ private JCheckBox[] jcLinks; private JTextField tfPath; private String baseDir; - - public ArchiveViewer(NBODialog d, String url) { super(d, "NBO Archive Files"); @@ -764,7 +767,7 @@ JPanel filePanel = new JPanel(new FlowLayout()); if (startsWith == null) startsWith = ""; - ButtonGroup bg = null;//new ButtonGroup(); + ButtonGroup bg = (ALLOW_SELECT_ALL ? null : new ButtonGroup()); for (int i = 0; i < links.length; i += 6) { Box box = Box.createVerticalBox(); for (int j = 0; j < 6; j++) { @@ -802,7 +805,7 @@ downloadFiles(); } } - + public void downloadFiles() { File f = null; logInfo("saving to " + tfPath.getText().trim(), Logger.LEVEL_INFO); @@ -853,9 +856,8 @@ setVisible(false); dispose(); } -} + } - /** * Structure for maintaining contents of $CHOOSE list */ Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogSearch.java 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogSearch.java 2017-01-24 06:05:17 UTC (rev 21333) @@ -262,11 +262,9 @@ moRb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { - runScriptQueued("nbo delete;"); - if (!useWireMesh) - runScriptQueued("nbo nomesh fill translucent " + opacityOp); - - runScriptQueued("nbo color " + color2 + " " + color1); + runScriptNow("nbo delete;" + + (!useWireMesh ? "nbo nomesh fill translucent " + opacityOp : "") + + "nbo color " + color2 + " " + color1); showJmolNBO("MO", orb2.getSelectedIndex() + 1); } }); @@ -440,12 +438,7 @@ keyWdBtn.setText("<html><font color=black>" + keyProp + "</font></html>"); keyWdBtn.setVisible(true); runScriptNow("mo delete;nbo delete"); - if (!useWireMesh) { - runScriptQueued("nbo nomesh fill translucent " + opacityOp); - runScriptQueued("mo nomesh fill translucent " + opacityOp); - } - runScriptQueued("nbo color " + color2 + " " + color1); - runScriptQueued("mo color " + color2 + " " + color1); + colorMeshes(); opList.removeAll(); ButtonGroup btnGroup = new ButtonGroup(); @@ -788,13 +781,11 @@ at1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (at2 == null) - runScriptQueued("select on; select {*}[" - + (at1.getSelectedIndex() + 1) + "]"); - else - runScriptQueued("select on; select remove{*}; " - + "select add {*}[" + (at1.getSelectedIndex() + 1) - + "]; select add {*}[" + (at2.getSelectedIndex() + 1) + "]"); + runScriptNow(at2 == null ? "select on; select {*}[" + + (at1.getSelectedIndex() + 1) + "]" + : "select on; select remove{*}; " + "select add {*}[" + + (at1.getSelectedIndex() + 1) + "]; select add {*}[" + + (at2.getSelectedIndex() + 1) + "]"); } }); l2.add(at1); @@ -805,7 +796,7 @@ at2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - runScriptQueued("select on; select remove{*}; " + "select add {*}[" + runScriptNow("select on; select remove{*}; " + "select add {*}[" + (at1.getSelectedIndex() + 1) + "]; select add {*}[" + (at2.getSelectedIndex() + 1) + "]"); } @@ -876,12 +867,7 @@ if (relabel) { showAtomNums(alphaSpin.isSelected()); relabel = false; - if (!useWireMesh) { - runScriptQueued("nbo nomesh fill translucent " + opacityOp); - runScriptQueued("mo nomesh fill translucent " + opacityOp); - } - runScriptQueued("nbo color " + color2 + " " + color1); - runScriptQueued("mo color " + color2 + " " + color1); + colorMeshes(); } final SB sb = new SB(); sb.append("GLOBAL C_PATH " + inputFileHandler.inputFile.getParent() + sep); @@ -1164,7 +1150,7 @@ } } if (nboView) { - runScriptQueued("select add {*}.bonds;color bonds lightgrey;" + runScriptNow("select add {*}.bonds;color bonds lightgrey;" + "wireframe 0.1;select remove {*}"); } for (int i = 0; i < vwr.ms.ac; i++) { @@ -1191,9 +1177,9 @@ else sb.append(";"); } - runScriptQueued(sb.toString()); + runScriptNow(sb.toString()); } - runScriptQueued("select remove{*}; " + "select add (atomno=" + runScriptNow("select remove{*}; " + "select add (atomno=" + (at1.getSelectedIndex() + 1) + ");" + "select add (atomno=" + (at2.getSelectedIndex() + 1) + ");"); @@ -1363,16 +1349,10 @@ if (keywordNumber == KEYWD_CMO) { if (vwr.ms.mc == 1) return; - runScriptQueued("frame 0"); + runScriptQueued("frame 0;refresh"); isNewJob = false; } - if (!useWireMesh) { - runScriptQueued("nbo nomesh fill translucent " + opacityOp); - runScriptQueued("mo nomesh fill translucent " + opacityOp); - } - runScriptQueued("nbo color " + color2 + " " + color1); - runScriptQueued("mo color " + color2 + " " + color1); - + colorMeshes(); rbSelection = -1; if (isOpenShell) { alphaSpin.setVisible(true); @@ -1427,7 +1407,7 @@ protected void processLabel(String line, int count) { double val = Double.parseDouble(line); val = round(val, 4); - runScriptQueued("select{*}[" + (count) + "];label " + val); + runScriptNow("select{*}[" + (count) + "];label " + val); } protected void processLabelBonds(String line) { @@ -1439,7 +1419,7 @@ float x = (vwr.ms.at[at1].x - vwr.ms.at[at2].x) / 2; float y = (vwr.ms.at[at1].y - vwr.ms.at[at2].y) / 2; float z = (vwr.ms.at[at1].z - vwr.ms.at[at2].z) / 2; - runScriptQueued("select (atomno = " + at1 + ");" + "label \"" + toks[2] + runScriptNow("select (atomno = " + at1 + ");" + "label \"" + toks[2] + "\";set labeloffset {" + x + "," + y + "," + (z) + "}"); } } Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogView.java 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogView.java 2017-01-24 06:05:17 UTC (rev 21333) @@ -27,6 +27,7 @@ import java.awt.Color; import java.awt.Container; import java.awt.Dimension; +import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -131,7 +132,7 @@ panel = new JPanel(); viewState = VIEW_STATE_MAIN; panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); - runScriptQueued("set bondpicking true"); + runScriptNow("set bondpicking true"); //JOBFILE//////// panel.add(titleBox(" Select Job ", new HelpBtn("view_job_help.htm"))); @@ -141,8 +142,9 @@ panel.add(inputBox); //if(fileHndlr == null) - inputFileHandler = new NBOFileHandler("", "47", NBOFileHandler.MODE_VIEW, "47", (NBODialog) this); - + inputFileHandler = new NBOFileHandler("", "47", NBOFileHandler.MODE_VIEW, + "47", (NBODialog) this); + //else // fileHndlr = new FileHndlr(fileHndlr.jobStem,"47",3,"47",(NBODialog)this); @@ -159,10 +161,18 @@ basis.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (alphaList != null) - alphaList = betaList = null; - basisSel(); - } + EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + + if (alphaList != null) + alphaList = betaList = null; + basisSel(); + } + }); + + } }); betaSpin = new JRadioButton("<html>β</html>"); alphaSpin = new JRadioButton("<html>α</html>"); @@ -173,29 +183,41 @@ betaSpin.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (betaSpin.isSelected()) { - setBonds(false); - showAtomNums(false); - } - if (nboView) { - String s2 = runScriptNow("print {*}.bonds"); - runScriptQueued("select " + s2 + ";color bonds lightgrey"); - } - basisSel(); + EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + if (betaSpin.isSelected()) { + setBonds(false); + showAtomNums(false); + } + if (nboView) { + runScriptNow("select *;color bonds lightgrey"); + } + basisSel(); + } + + }); } }); alphaSpin.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (alphaSpin.isSelected()) { - setBonds(true); - showAtomNums(true); - } - if (nboView) { - String s2 = runScriptNow("print {*}.bonds"); - runScriptQueued("select " + s2 + ";color bonds lightgrey"); - } - basisSel(); + EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + if (alphaSpin.isSelected()) { + setBonds(true); + showAtomNums(true); + } + if (nboView) { + runScriptNow("select*;color bonds lightgrey"); + } + basisSel(); + } + + }); } }); horizBox.add(alphaSpin); @@ -292,7 +314,8 @@ String fileType = runScriptNow("print _fileType"); if (fileType.equals("GenNBO")) { - File f = new File(runScriptNow("select within(model, visible); print _modelFile")); + File f = new File( + runScriptNow("select within(model, visible); print _modelFile")); inputFileHandler.setInputFile(NBOFileHandler.newNBOFile(f, "47")); } @@ -301,7 +324,8 @@ protected void doSelectOrbital() { int fileNum = 31 + basis.getSelectedIndex(); - File f = NBOFileHandler.newNBOFile(inputFileHandler.inputFile, "" + fileNum); + File f = NBOFileHandler + .newNBOFile(inputFileHandler.inputFile, "" + fileNum); int[] selected = orbitals.getSelectedIndices(); int size = selected.length - 1; if (size < 0) @@ -321,14 +345,14 @@ if (PT.isOneOf("" + (selected[i] + 1), selectedOrbs)) continue; selectedOrbs += (selected[i] + 1) + ";"; - runScriptNow("frame " + (i / 2 + 1) + ".1"); + runScriptQueued("frame " + (i / 2 + 1) + ".1"); if (size % 2 == 0) showJmolNBO(type, selected[i] + 1); else showJmolMO(type, selected[i] + 1); } String frame = (startingModelCount + modelCount - 1) + ".1"; - runScriptQueued("frame " + startingModelCount + ".1 " + frame); + runScriptQueued("frame " + startingModelCount + ".1 " + frame + ";refresh"); } private void viewSettings() { @@ -455,10 +479,8 @@ protected void setOrbitalColors(char plusMinus) { currSign = plusMinus; - if (plusMinus == '+') - runScriptQueued("nbo color " + color2 + " " + color1); - else - runScriptQueued("nbo color " + color1 + " " + color2); + runScriptNow("nbo color " + + (plusMinus == '+' ? color2 + " " + color1 : color1 + " " + color2)); } private String getPlaneParams() { @@ -533,8 +555,7 @@ public void windowClosing(WindowEvent e) { planeDef = planeFields[0].getText() + ";" + planeFields[1].getText() + ";" + planeFields[2].getText(); - runScriptQueued("select off"); - runScriptNow("set bondpicking true"); + runScriptNow("select off;set bondpicking true"); viewState = VIEW_STATE_MAIN; } }); @@ -546,8 +567,7 @@ d.dispose(); planeDef = planeFields[0].getText() + ";" + planeFields[1].getText() + ";" + planeFields[2].getText(); - runScriptQueued("select off"); - runScriptNow("set bondpicking true"); + runScriptNow("select off;set bondpicking true"); viewState = VIEW_STATE_MAIN; } }); @@ -622,8 +642,7 @@ @Override public void windowClosing(WindowEvent e) { vectorDef = vectorFields[0].getText() + ";" + vectorFields[1].getText(); - runScriptQueued("select off"); - runScriptNow("set bondpicking true"); + runScriptNow("select off;set bondpicking true"); viewState = VIEW_STATE_MAIN; } }); @@ -632,8 +651,7 @@ public void actionPerformed(ActionEvent e) { d.dispose(); vectorDef = vectorFields[0].getText() + ";" + vectorFields[1].getText(); - runScriptQueued("select off"); - runScriptNow("set bondpicking true"); + runScriptNow("select off;set bondpicking true"); viewState = VIEW_STATE_MAIN; } }); @@ -972,7 +990,8 @@ protected void basisSel() { newModel = true; int fileNum = 31 + basis.getSelectedIndex(); - File f = NBOFileHandler.newNBOFile(inputFileHandler.inputFile, "" + fileNum); + File f = NBOFileHandler + .newNBOFile(inputFileHandler.inputFile, "" + fileNum); if (!f.exists()) { runJob("PLOT", inputFileHandler.inputFile, "gennbo"); return; @@ -1002,7 +1021,10 @@ betaList = list; else alphaList = list; - loadModelFileQueued(f, NBOFileHandler.pathWithoutExtension(f.getAbsolutePath()).equals(NBOFileHandler.pathWithoutExtension(getJmolFilename())), false); + loadModelFileQueued( + f, + NBOFileHandler.pathWithoutExtension(f.getAbsolutePath()).equals( + NBOFileHandler.pathWithoutExtension(getJmolFilename())), false); } protected void setLastOrbitalSelection() { @@ -1034,7 +1056,8 @@ sb.append("a U" + i + " " + tmp2 + sep); tmp2 = ""; } - inputFileHandler.writeToFile(nboService.serverDir + "/jview.txt", sb.toString()); + inputFileHandler.writeToFile(nboService.serverDir + "/jview.txt", + sb.toString()); sb = new SB(); sb.append("GLOBAL C_PATH " + inputFileHandler.inputFile.getParent() + sep); @@ -1080,7 +1103,8 @@ sb.append("a V_U" + i + " " + tmp2 + sep); tmp2 = ""; } - inputFileHandler.writeToFile(nboService.serverDir + "/jview.txt", sb.toString()); + inputFileHandler.writeToFile(nboService.serverDir + "/jview.txt", + sb.toString()); sb = new SB(); sb.append("GLOBAL C_PATH " + inputFileHandler.inputFile.getParent() + sep); sb.append("GLOBAL C_JOBSTEM " + inputFileHandler.jobStem + sep); @@ -1154,7 +1178,8 @@ sb.append("a V_U" + i + " " + tmp2 + sep); tmp2 = ""; } - inputFileHandler.writeToFile(nboService.serverDir + "/jview.txt", sb.toString()); + inputFileHandler.writeToFile(nboService.serverDir + "/jview.txt", + sb.toString()); sb = new SB(); sb.append("GLOBAL C_PATH " + inputFileHandler.inputFile.getParent() + sep); sb.append("GLOBAL C_JOBSTEM " + inputFileHandler.jobStem + sep); @@ -1377,16 +1402,9 @@ return; if (!newModel) { String frame = (startingModelCount + modelCount - 1) + ".1"; - runScriptNow("frame " + frame); - if (!useWireMesh) { - runScriptNow("nbo nomesh fill translucent " + opacityOp); - runScriptNow("mo nomesh fill translucent " + opacityOp); - } - - runScriptNow("nbo color " + color2 + " " + color1); - runScriptNow("mo color " + color2 + " " + color1); - String bonds = runScriptNow("print {visible}.bonds"); - runScriptQueued("select bonds " + bonds + ";wireframe 0"); + runScriptQueued("frame " + frame + ";refesh"); + colorMeshes(); + runScriptQueued("var b = {visible}.bonds;select bonds @b;wireframe 0;refresh"); return; } @@ -1412,25 +1430,12 @@ if (!inputFileHandler.getChooseList()) logInfo("Error reading $CHOOSE list", Logger.LEVEL_ERROR); showAtomNums(true); - - if (!useWireMesh) { - runScriptQueued("nbo nomesh fill translucent " + opacityOp); - runScriptQueued("mo nomesh fill translucent " + opacityOp); - } - - runScriptQueued("nbo color " + color2 + " " + color1); - runScriptQueued("mo color " + color2 + " " + color1); - if (isOpenShell) { - alphaSpin.setVisible(true); - betaSpin.setVisible(true); - } else { - alphaSpin.setVisible(false); - betaSpin.setVisible(false); - } + colorMeshes(); + alphaSpin.setVisible(isOpenShell); + betaSpin.setVisible(isOpenShell); setBonds(true); - for (int i = 0; i < panel.getComponentCount(); i++) { + for (int i = 0; i < panel.getComponentCount(); i++) panel.getComponent(i).setVisible(true); - } } catch (NullPointerException e) { log(e.getMessage() + " reading file", 'r'); } @@ -1442,23 +1447,23 @@ else basis.setSelectedIndex(BASIS_MO); // TODO - + } -// @Override -// protected void showConfirmationDialog(String st, File newFile, String ext) { -// int i = JOptionPane.showConfirmDialog(this, st, "Message", -// JOptionPane.YES_NO_OPTION); -// if (i == JOptionPane.YES_OPTION) { -// JDialog d = new JDialog(this); -// d.setLayout(new BorderLayout()); -// JTextPane tp = new JTextPane(); -// d.add(tp, BorderLayout.CENTER); -// d.setSize(new Dimension(500, 600)); -// tp.setText(fileHndlr.getFileData(FileHndlr.newNBOFile(newFile, "nbo") -// .toString())); -// d.setVisible(true); -// } -// } + // @Override + // protected void showConfirmationDialog(String st, File newFile, String ext) { + // int i = JOptionPane.showConfirmDialog(this, st, "Message", + // JOptionPane.YES_NO_OPTION); + // if (i == JOptionPane.YES_OPTION) { + // JDialog d = new JDialog(this); + // d.setLayout(new BorderLayout()); + // JTextPane tp = new JTextPane(); + // d.add(tp, BorderLayout.CENTER); + // d.setSize(new Dimension(500, 600)); + // tp.setText(fileHndlr.getFileData(FileHndlr.newNBOFile(newFile, "nbo") + // .toString())); + // d.setVisible(true); + // } + // } } Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBOFileHandler.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBOFileHandler.java 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBOFileHandler.java 2017-01-24 06:05:17 UTC (rev 21333) @@ -7,11 +7,9 @@ import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; - import javajs.util.PT; import javajs.util.SB; @@ -45,13 +43,12 @@ protected NBODialog dialog; protected boolean canReRun; - protected final static int MODE_MODEL_USE = 1; protected final static int MODE_RUN = 2; protected final static int MODE_VIEW = 3; protected final static int MODE_SEARCH = 4; protected final static int MODE_MODEL_SAVE = 5; - + public NBOFileHandler(String name, String ext, final int mode, String useExt, NBODialog d) { dialog = d; @@ -221,66 +218,66 @@ } } + /** + * Read input parameters from .47 file + * + * @return [ pre-keyword params, keywords, post-keyword params ] + */ protected String[] read47File() { String[] fileData = new String[] { "", "", "" }; String nboKeywords = ""; - - BufferedReader b = null; - try { - b = new BufferedReader(new FileReader(inputFile)); - } catch (FileNotFoundException e1) { - return fileData; - } SB data = new SB(); - String line; - try { - while ((line = b.readLine()) != null) { - data.append(line + sep); - } - b.close(); - } catch (IOException e) { + if (!readFileBuffered(inputFile, data)) return fileData; - } - String[] tokens = PT.split(data.toString(), "$END"); - boolean atParams = false; - SB fout = new SB(), fout2 = new SB(); - if (tokens.length <= 0) + String s = PT.trim(data.toString(), "\t\r\n "); + String[] tokens = PT.split(s, "$END"); + if (tokens.length == 0) return fileData; - for (int i = 0;;) { - String s = tokens[i]; - s = PT.trim(s, "\t\r\n "); - if (!atParams) { - if (s.indexOf("$NBO") >= 0) { - atParams = true; - if (PT.split(s, "$NBO").length > 1) - nboKeywords = (PT.split(s, "$NBO")[1]); - else - nboKeywords = ""; - //cleanNBOKeylist(""); - s = PT.split(s, "$NBO")[0]; - dialog.logInfo("$NBO: " + nboKeywords, Logger.LEVEL_INFO); - } - if (!s.equals("")) - fout.append(s).append(sep); - if (++i == tokens.length) - break; - if (!atParams) - fout.append("$END").append(sep); - } else { - fout2.append(s).append(sep); - if (++i == tokens.length) - break; - fout2.append("$END").append(sep); - + SB preParams = new SB(); + SB postParams = new SB(); + SB params = preParams; + // ignore everything after the last $END token + for (int i = 0, n = tokens.length - 1; i < n; i++) { + s = PT.trim(tokens[i], "\t\r\n "); + if (params == preParams && s.indexOf("$NBO") >= 0) { + String[] prePost = PT.split(s, "$NBO"); + if (prePost[0].length() > 0) + params.append(s).append(sep); + nboKeywords = prePost[1]; + params = postParams; + continue; } + params.append(s).append(sep).append("$END").append(sep); } - fileData[0] = fout.toString(); + dialog.logInfo("$NBO: " + nboKeywords, Logger.LEVEL_INFO); + fileData[0] = preParams.toString(); fileData[1] = nboKeywords; - fileData[2] = fout2.toString(); + fileData[2] = postParams.toString(); return fileData; } /** + * Read a file reducing lines to + * + * @param inputFile + * @param data + * @return true if successful; false if not + */ + private boolean readFileBuffered(File inputFile, SB data) { + try { + BufferedReader b = null; + b = new BufferedReader(new FileReader(inputFile)); + String line; + while ((line = b.readLine()) != null) + data.append(line + sep); + b.close(); + return true; + } catch (IOException e) { + } + return false; + } + + /** * gets a valid $CHOOSE list from nbo file if it exists and corrects the bonds * in the jmol model * @@ -294,8 +291,8 @@ String[] tokens = PT.split(fdata, "\n $CHOOSE"); int i = 1; if (tokens.length < 2) { - dialog.logInfo("An error occurred during run, view .nbo output?", - Logger.LEVEL_ERROR); + dialog.logInfo("$CHOOSE record was not found in " + f, + Logger.LEVEL_INFO); return false; } if (tokens[1].trim().startsWith("keylist")) { @@ -349,7 +346,8 @@ //useful file manipulation methods ///////////////////////////// protected static File newNBOFile(File f, String ext) { - return new File(pathWithoutExtension(f.toString().replace('\\', '/')) + "." + ext); + return new File(pathWithoutExtension(f.toString().replace('\\', '/')) + "." + + ext); } protected static String pathWithoutExtension(String fname) { @@ -357,12 +355,11 @@ return (pt < 0 ? fname : fname.substring(0, pt)); } - protected void clearInputFile() { -// if (jobStem.length() == 0) -// return; -// for (String ext : EXT_ARRAY) -// new File(dialog.nboService.serverDir + "/" + jobStem + "." + ext).delete(); + // if (jobStem.length() == 0) + // return; + // for (String ext : EXT_ARRAY) + // new File(dialog.nboService.serverDir + "/" + jobStem + "." + ext).delete(); inputFile = null; if (dialog.dialogMode == 'v') dialog.resetView(); @@ -387,7 +384,8 @@ if (tfExt != null) tfExt.setText(ext); if (dialog.saveFileHandler != null && this != dialog.saveFileHandler) - dialog.saveFileHandler.setInput(dir, name, PT.isOneOf(ext, NBODialogConfig.OUTPUT_FILE_EXTENSIONS) ? ext : ""); + dialog.saveFileHandler.setInput(dir, name, + PT.isOneOf(ext, NBODialogConfig.OUTPUT_FILE_EXTENSIONS) ? ext : ""); //System.out.println("-------" + f + n + "/" + e); if (dir != null && name != null && ext != null) inputFile = new File(dir + "\\" + name + "." + ext); Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBOService.java 2017-01-23 23:58:59 UTC (rev 21332) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBOService.java 2017-01-24 06:05:17 UTC (rev 21333) @@ -271,10 +271,7 @@ } String startProcess(boolean sync, @SuppressWarnings("unused") final int mode) { - //this.dialogMode = mode; try { - //if (cantStartServer) - //return null; System.out.println("starting NBO process sync=" + sync); File pathToExecutable = new File(serverPath); ProcessBuilder builder = new ProcessBuilder(serverPath); @@ -450,7 +447,7 @@ nboDialog.logInfo(line, isFortranError(line) ? Logger.LEVEL_ERROR : Logger.LEVEL_DEBUG); } - private boolean isFortranError(String line) { + protected boolean isFortranError(String line) { return line.indexOf("Permission denied") >= 0 || line.indexOf("PGFIO-F") >= 0 || line.indexOf("Invalid command") >= 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-24 14:19:32
|
Revision: 21335 http://sourceforge.net/p/jmol/code/21335 Author: hansonr Date: 2017-01-24 14:19:29 +0000 (Tue, 24 Jan 2017) Log Message: ----------- NBO plug-in support Modified Paths: -------------- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialog.java trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogConfig.java Added Paths: ----------- trunk/Jmol/src/org/openscience/jmol/app/images/nbo6logo20x20.gif Removed Paths: ------------- trunk/Jmol/src/org/openscience/jmol/app/images/nbo6logo.gif Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2017-01-24 06:46:13 UTC (rev 21334) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2017-01-24 14:19:29 UTC (rev 21335) @@ -168,15 +168,29 @@ /** + * Determine the point group of a set of points or atoms, allowing additionally + * for considering the point group of vibrational modes. * - * @param pgLast - * @param center TODO - * @param atomset - * @param bsAtoms + * The two parameters used are "distanceTolerance" and "linearTolerance" + * + * "distanceTolerance is the distance an atom must be within relative to its symmetry-projected + * idealized position. + * + * "linearTolerance" has dimension degrees and sets the maximum + * deviation that two potential symmetry axes can have to be considered + * "colinear" or "perpendicular" in the final symmetry model. Its default is 8 + * deg. + * + * + * @param pgLast helpful to speed checking; may be null + * @param center known center atom; may be null + * @param atomset the set of points or atoms to consider + * @param bsAtoms possibly some subset of atomset * @param haveVibration - * @param distanceTolerance - * @param linearTolerance - * @param localEnvOnly + * @param distanceTolerance atom-position tolerance + * @param linearTolerance symmetry-axis direction tolerance + * @param localEnvOnly set false to additionally consider valence (number of bonds) of atoms + * * @return a PointGroup */ Deleted: trunk/Jmol/src/org/openscience/jmol/app/images/nbo6logo.gif =================================================================== (Binary files differ) Copied: trunk/Jmol/src/org/openscience/jmol/app/images/nbo6logo20x20.gif (from rev 21326, trunk/Jmol/src/org/openscience/jmol/app/images/nbo6logo.gif) =================================================================== (Binary files differ) Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-24 06:46:13 UTC (rev 21334) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-24 14:19:29 UTC (rev 21335) @@ -120,6 +120,12 @@ JsonNioServer serverService; public NBOService nboService; + // Called by NBODialog + + public void setNBOService(NBOService service) { + this.nboService = service; + } + protected String appletContext; protected PropertyChangeSupport pcs = new PropertyChangeSupport(this); protected DisplayPanel display; @@ -1112,12 +1118,7 @@ } @Override public void actionPerformed(ActionEvent arg0) { - getNBOService(); - - if (nboDialog == null) - nboDialog = new NBODialog(frame, vwr, nboService); - else - nboDialog.setVisible(true); + startNBO(null); } } @@ -1164,20 +1165,35 @@ // nodes[3].setEnabled(true); // view // nodes[4].setEnabled(true); // search } + + /** + * @param type + * unused + */ void startNBO(String type) { - - // this next is the problem - getNBOService(); + String nboServerPath = historyFile.getProperty("nboServerPath", null); + if (nboServerPath == null) { + vwr.alert("NBOServe.exe has not been installed. See http://nbo6.chem.wisc.edu/new6_css.htm for additional information"); + return; + } + if (nboDialog == null) - nboDialog = new NBODialog(frame, vwr, nboService); - else + nboDialog = (NBODialog) getInstanceWithParams("org.openscience.jmol.app.nbo.NBODialog", + new Class[] { JFrame.class, Viewer.class }, + new Object[] { frame, vwr }); + if (nboDialog != null) nboDialog.setVisible(true); - //if (type != null) - //nboDialog.openPanel(type.charAt(0)); - } + public static Object getInstanceWithParams(String name, Class[] classes, Object... params) { + try { + Class<?> cl = Class.forName(name); + return cl.getConstructor(classes).newInstance(params); + } catch (Exception e) { + return null; + } + } class UguideAction extends AbstractAction { public UguideAction() { @@ -1820,11 +1836,6 @@ vwr.syncScript(script, "~", 0); } - public NBOService getNBOService() { - return (nboService == null ? (nboService = new NBOService(vwr)) - : nboService); - } - public void updateConsoleFont() { AppConsole console = (AppConsole) vwr.getProperty("DATA_API", "getAppConsole", null); Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties 2017-01-24 06:46:13 UTC (rev 21334) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties 2017-01-24 14:19:29 UTC (rev 21335) @@ -51,7 +51,7 @@ exportImage=imageButton.png povrayImage=povrayButton.png gaussImage=gaussianButton.png -nboImage=nbo6logo.gif +nboImage=nbo6logo20x20.gif reloadScriptImage=reloadButton.png reloadScript=load recentFilesImage=recentFilesButton.png Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialog.java 2017-01-24 06:46:13 UTC (rev 21334) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialog.java 2017-01-24 14:19:29 UTC (rev 21335) @@ -132,32 +132,29 @@ /** * Creates a dialog for getting info related to output frames in nbo format. * - * @param f - * The frame assosiated with the dialog + * @param jmolFrame + * The Jmol frame associated with the dialog * @param vwr * The interacting display we are reproducing (source of view angle * info etc) - * @param nboService */ - public NBODialog(JFrame f, Viewer vwr, NBOService nboService) { - super(f); + public NBODialog(JFrame jmolFrame, Viewer vwr) { + super(jmolFrame); setTitle("NBOPro6@Jmol"); - ImageIcon img = null; - String imageName = "org/openscience/jmol/app/images/nbo6logo.gif"; + this.vwr = vwr; + + this.nboService = new NBOService(vwr); + String imageName = "org/openscience/jmol/app/images/nbo6logo20x20.gif"; URL imageUrl = this.getClass().getClassLoader().getResource(imageName); - if (imageUrl != null) { - img = new ImageIcon(imageUrl); - } - this.setIconImage(img.getImage()); - this.vwr = vwr; - this.nboService = nboService; + if (imageUrl != null) + this.setIconImage(new ImageIcon(imageUrl).getImage()); this.setLayout(new BorderLayout()); sendDefaultScript(); //get saved properties nboService.nboDialog = this; - createDialog(f.getBounds()); + createDialog(jmolFrame.getBounds()); } @@ -217,7 +214,7 @@ } }; - licenseInfo = new JLabel("Licence not found", SwingConstants.CENTER); + licenseInfo = new JLabel("License not found", SwingConstants.CENTER); //licenseInfo.setBackground(null); licenseInfo.setOpaque(true); @@ -335,7 +332,8 @@ p.setLayout(new BoxLayout(p,BoxLayout.Y_AXIS)); //Header stuff//////////// - ImageIcon imageIcon = new ImageIcon(this.getClass().getResource("nbo6logo.gif")); + ImageIcon imageIcon = getIcon("nbo6logo"); + Image image = imageIcon.getImage(); Image newimg = image.getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH); imageIcon = new ImageIcon(newimg); @@ -541,6 +539,10 @@ return p; } + private ImageIcon getIcon(String name) { + return new ImageIcon(this.getClass().getResource(name + ".gif")); + } + protected void nboOutput() { nboOutput = new JPanel(new BorderLayout()); settingsBox = new JPanel(new BorderLayout()); @@ -658,30 +660,26 @@ case 'm': dialogMode = DIALOG_MODEL; centerPanel.setLeftComponent(modulePanel = buildModelPanel()); - icon = new JLabel(new ImageIcon(this.getClass().getResource( - "nbomodel_logo.gif"))); + icon = new JLabel(getIcon("nbomodel_logo")); setThis(modelButton); break; case 'r': dialogMode = DIALOG_RUN; centerPanel.setLeftComponent(modulePanel = buildRunPanel()); - icon = new JLabel(new ImageIcon(this.getClass().getResource( - "nborun_logo.gif"))); + icon = new JLabel(getIcon("nborun_logo")); setThis(runButton); break; case 'v': dialogMode = DIALOG_VIEW; centerPanel.setLeftComponent(modulePanel = buildViewPanel()); - icon = new JLabel(new ImageIcon(this.getClass().getResource( - "nboview_logo.gif"))); + icon = new JLabel(getIcon("nboview_logo")); setThis(viewButton); break; case 's': dialogMode = DIALOG_SEARCH; centerPanel.setLeftComponent(modulePanel = buildSearchPanel()); //settingsBox.setVisible(true); - icon = new JLabel(new ImageIcon(this.getClass().getResource( - "nbosearch_logo.gif"))); + icon = new JLabel(getIcon("nbosearch_logo")); setThis(searchButton); break; } @@ -848,5 +846,5 @@ else loadModelFileQueued(file, false, false); } - + } Modified: trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogConfig.java 2017-01-24 06:46:13 UTC (rev 21334) +++ trunk/Jmol/src/org/openscience/jmol/app/nbo/NBODialogConfig.java 2017-01-24 14:19:29 UTC (rev 21335) @@ -628,7 +628,7 @@ protected void sendDefaultScript() { - runScriptNow(DEFAULT_SCRIPT); + runScriptQueued(DEFAULT_SCRIPT); } protected void runScriptQueued(String script) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-25 03:04:55
|
Revision: 21342 http://sourceforge.net/p/jmol/code/21342 Author: hansonr Date: 2017-01-25 03:04:52 +0000 (Wed, 25 Jan 2017) Log Message: ----------- moving nbo images, working on Model Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties Added Paths: ----------- trunk/Jmol/src/org/gennbo/image/ trunk/Jmol/src/org/gennbo/image/nbo6logo.gif trunk/Jmol/src/org/gennbo/image/nbo6logo20x20.gif trunk/Jmol/src/org/gennbo/image/nbomodel_logo.gif trunk/Jmol/src/org/gennbo/image/nborun_logo.gif trunk/Jmol/src/org/gennbo/image/nbosearch_logo.gif trunk/Jmol/src/org/gennbo/image/nboview_logo.gif Removed Paths: ------------- trunk/Jmol/src/org/gennbo/nbo6logo.gif trunk/Jmol/src/org/gennbo/nbomodel_logo.gif trunk/Jmol/src/org/gennbo/nborun_logo.gif trunk/Jmol/src/org/gennbo/nbosearch_logo.gif trunk/Jmol/src/org/gennbo/nboview_logo.gif trunk/Jmol/src/org/openscience/jmol/app/images/nbo6logo20x20.gif Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-24 14:28:58 UTC (rev 21341) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-25 03:04:52 UTC (rev 21342) @@ -142,12 +142,8 @@ super(jmolFrame); setTitle("NBOPro6@Jmol"); this.vwr = vwr; - this.nboService = new NBOService(vwr); - String imageName = "org/openscience/jmol/app/images/nbo6logo20x20.gif"; - URL imageUrl = this.getClass().getClassLoader().getResource(imageName); - if (imageUrl != null) - this.setIconImage(new ImageIcon(imageUrl).getImage()); + this.setIconImage(getIcon("nbo6logo20x20").getImage()); this.setLayout(new BorderLayout()); sendDefaultScript(); //get saved properties @@ -540,7 +536,7 @@ } private ImageIcon getIcon(String name) { - return new ImageIcon(this.getClass().getResource(name + ".gif")); + return new ImageIcon(this.getClass().getResource("image/" + name + ".gif")); } protected void nboOutput() { @@ -795,9 +791,8 @@ */ protected void clearOutput(){ bodyText = ""; - String fontFamily = jpNBOLog.getFont().getFamily(); - jpNBOLog.setText("<html><body style=\"font-family: " + fontFamily + - bodyText + "</html>" ); + // String fontFamily = jpNBOLog.getFont().getFamily(); + jpNBOLog.setText(""); } protected boolean checkJmolNBO(){ Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-01-24 14:28:58 UTC (rev 21341) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-01-25 03:04:52 UTC (rev 21342) @@ -962,10 +962,11 @@ s = s2[1]; double val = Double.parseDouble(s); val = round(val, 2); - currVal.setText(desc + val); + currVal.setText("current value: " + val); } else { - currVal.setText(desc + runScriptNow(script)); + currVal.setText("current value: " + runScriptNow(script)); } + valLab.setText("new " + desc); break; case CLIP: if (cnt == 2) { Copied: trunk/Jmol/src/org/gennbo/image/nbo6logo.gif (from rev 21340, trunk/Jmol/src/org/gennbo/nbo6logo.gif) =================================================================== (Binary files differ) Copied: trunk/Jmol/src/org/gennbo/image/nbo6logo20x20.gif (from rev 21339, trunk/Jmol/src/org/openscience/jmol/app/images/nbo6logo20x20.gif) =================================================================== (Binary files differ) Copied: trunk/Jmol/src/org/gennbo/image/nbomodel_logo.gif (from rev 21340, trunk/Jmol/src/org/gennbo/nbomodel_logo.gif) =================================================================== (Binary files differ) Copied: trunk/Jmol/src/org/gennbo/image/nborun_logo.gif (from rev 21340, trunk/Jmol/src/org/gennbo/nborun_logo.gif) =================================================================== (Binary files differ) Copied: trunk/Jmol/src/org/gennbo/image/nbosearch_logo.gif (from rev 21340, trunk/Jmol/src/org/gennbo/nbosearch_logo.gif) =================================================================== (Binary files differ) Copied: trunk/Jmol/src/org/gennbo/image/nboview_logo.gif (from rev 21340, trunk/Jmol/src/org/gennbo/nboview_logo.gif) =================================================================== (Binary files differ) Deleted: trunk/Jmol/src/org/gennbo/nbo6logo.gif =================================================================== (Binary files differ) Deleted: trunk/Jmol/src/org/gennbo/nbomodel_logo.gif =================================================================== (Binary files differ) Deleted: trunk/Jmol/src/org/gennbo/nborun_logo.gif =================================================================== (Binary files differ) Deleted: trunk/Jmol/src/org/gennbo/nbosearch_logo.gif =================================================================== (Binary files differ) Deleted: trunk/Jmol/src/org/gennbo/nboview_logo.gif =================================================================== (Binary files differ) Deleted: trunk/Jmol/src/org/openscience/jmol/app/images/nbo6logo20x20.gif =================================================================== (Binary files differ) Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties 2017-01-24 14:28:58 UTC (rev 21341) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties 2017-01-25 03:04:52 UTC (rev 21342) @@ -51,7 +51,6 @@ exportImage=imageButton.png povrayImage=povrayButton.png gaussImage=gaussianButton.png -nboImage=nbo6logo20x20.gif reloadScriptImage=reloadButton.png reloadScript=load recentFilesImage=recentFilesButton.png This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-25 16:50:16
|
Revision: 21344 http://sourceforge.net/p/jmol/code/21344 Author: hansonr Date: 2017-01-25 16:50:13 +0000 (Wed, 25 Jan 2017) Log Message: ----------- plugin architecture added; NBO plugin; NBO functional Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBOService.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-25 14:38:53 UTC (rev 21343) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-25 16:50:13 UTC (rev 21344) @@ -231,6 +231,8 @@ settingsDialog.setSize(new Dimension(350,400)); settingsDialog.setLocation(this.getX() + 100,this.getY()+100); this.setVisible(true); + if (nboService.isOffLine()) + settingsDialog.setVisible(true); } /** @@ -615,9 +617,6 @@ protected void openPanel(char type) { if (type == 'c') { - if (settingsDialog.isVisible()) { - return; - } settingsDialog.setVisible(true); return; } Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-25 14:38:53 UTC (rev 21343) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-25 16:50:13 UTC (rev 21344) @@ -440,23 +440,13 @@ */ protected void doPathBrowseClicked(final JTextField tf, String fname, int mode) { JFileChooser myChooser = new JFileChooser(); - String exe = ""; - switch (mode) { - case MODE_PATH_SERVICE: - exe = "exe"; - myChooser.setFileFilter(new FileNameExtensionFilter(exe, exe)); - myChooser.setFileHidingEnabled(true); - myChooser.setSelectedFile(new File(fname)); - break; - case MODE_PATH_WORKING: - myChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - myChooser.setSelectedFile(new File(fname + "/ ")); - break; - } + myChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + myChooser.setSelectedFile(new File(fname + "/ ")); int button = myChooser.showDialog(this, GT._("Select")); if (button == JFileChooser.APPROVE_OPTION) { File newFile = myChooser.getSelectedFile(); tf.setText(PT.rep(newFile.toString(), "\\", "/")); + tf.postActionEvent(); } } Modified: trunk/Jmol/src/org/gennbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOService.java 2017-01-25 14:38:53 UTC (rev 21343) +++ trunk/Jmol/src/org/gennbo/NBOService.java 2017-01-25 16:50:13 UTC (rev 21344) @@ -217,6 +217,7 @@ */ protected void setServerPath(String path) { serverPath = NBOFileHandler.fixPath(path); + setNBOProperty("serverPath", path); } protected boolean isEnabled() { @@ -576,7 +577,7 @@ String arch = System.getenv("PROCESSOR_ARCHITECTURE"); File f = new File(getServerPath("gennbo.bat")); if (!f.exists()) { - vwr.alert(f + " not found, make sure gennbo.bat is in same directory as nboserve.exe"); + vwr.alert(f + " not found, make sure gennbo.bat is in same directory as " + exeName); return false; } String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432"); Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-25 14:38:53 UTC (rev 21343) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-25 16:50:13 UTC (rev 21344) @@ -1857,6 +1857,7 @@ public static void setPluginOption(String pluginName, String key, String value) { pluginFile.addProperty(pluginName + "_" + key, value); + pluginFile.save(); } public static String getPluginOption(String pluginName, String key, String defaultValue) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-25 20:52:17
|
Revision: 21346 http://sourceforge.net/p/jmol/code/21346 Author: hansonr Date: 2017-01-25 20:52:14 +0000 (Wed, 25 Jan 2017) Log Message: ----------- adding NBOPlugin and JmolPlugin Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogRun.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOFileHandler.java trunk/Jmol/src/org/gennbo/NBOService.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java Added Paths: ----------- trunk/Jmol/src/org/gennbo/NBOPlugin.java trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -45,7 +45,6 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.net.URL; import javajs.swing.SwingConstants; import javajs.util.PT; @@ -109,8 +108,6 @@ private JPanel topPanel; protected JButton modelButton, runButton, viewButton, searchButton; - protected JPanel settingsPanel; - private JPanel homePanel; boolean isJmolNBO; @@ -119,6 +116,8 @@ protected JLabel statusLab; protected JPanel nboOutput; + + private NBOPlugin nboPlugin; static final char DIALOG_CONFIG = 'c'; static final char DIALOG_MODEL = 'm'; @@ -137,19 +136,20 @@ * @param vwr * The interacting display we are reproducing (source of view angle * info etc) + * @param plugin */ - public NBODialog(JFrame jmolFrame, Viewer vwr) { + public NBODialog(NBOPlugin plugin, JFrame jmolFrame, Viewer vwr) { super(jmolFrame); - setTitle("NBOPro6@Jmol"); + setTitle("NBOPro6@Jmol " + plugin.getVersion()); + nboPlugin = plugin; this.vwr = vwr; - this.nboService = new NBOService(vwr); + this.nboService = new NBOService(this, vwr); this.setIconImage(getIcon("nbo6logo20x20").getImage()); this.setLayout(new BorderLayout()); sendDefaultScript(); + //get saved properties - nboService.nboDialog = this; - createDialog(jmolFrame.getBounds()); } @@ -171,14 +171,10 @@ addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { - //TODO -// nboService.manager.clearQueue(); -// //nboService.manager. -// nboService.closeProcess(); + nboService.closeProcess(); close(); } }); - //final NBODialog dialog = this; placeNBODialog(this); helpBtn = new HelpBtn(""){ @@ -225,11 +221,12 @@ //centerPanel.setLeftComponent(mainPage()); this.dialogMode = DIALOG_HOME; this.getContentPane().add(topPanel,BorderLayout.NORTH); - settingsPanel = buildSettingsPanel(); settingsDialog = new JDialog(this,"Settings"); - settingsDialog.add(settingsPanel); settingsDialog.setSize(new Dimension(350,400)); settingsDialog.setLocation(this.getX() + 100,this.getY()+100); + settingsPanel = new JPanel(); + buildSettingsPanel(settingsPanel); + settingsDialog.add(settingsPanel); this.setVisible(true); if (nboService.isOffLine()) settingsDialog.setVisible(true); @@ -643,7 +640,7 @@ runScriptNow("mo delete; nbo delete; select off"); break; } - nboService.jobQueue.clear(); + nboService.clearQueue(); nboService.isWorking = false; this.settingsBox.setVisible(false); if (!checkEnabled()) @@ -840,5 +837,4 @@ else loadModelFileQueued(file, false, false); } - } Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -33,10 +33,7 @@ import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.io.BufferedReader; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -64,7 +61,6 @@ import javax.swing.ListCellRenderer; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.plaf.basic.BasicComboPopup; import javax.swing.plaf.basic.ComboPopup; import javax.swing.plaf.metal.MetalComboBoxUI; @@ -111,7 +107,11 @@ protected JTextPane jpNBOLog; protected JSlider opacity = new JSlider(); + protected JPanel settingsPanel; + protected JComboBox<Color> colorBox1, colorBox2; + protected JCheckBox jCheckAtomNum, jCheckSelHalo, jCheckDebugVerbose, jCheckNboView, jCheckWireMesh; + protected String bodyText = ""; protected boolean showAtNum, nboView, useWireMesh; @@ -149,22 +149,33 @@ /** * Creates a dialog for getting info related to output frames in nbo format. + * @param settingsPanel * * @return settings panel */ @SuppressWarnings("unchecked") - protected JPanel buildSettingsPanel() { + protected JPanel buildSettingsPanel(JPanel settingsPanel) { + settingsPanel.removeAll(); checkNBOStatus(); String viewOpts = getOrbitalDisplayOptions(); - JPanel filePanel = new JPanel(); - filePanel.setLayout(new BoxLayout(filePanel, BoxLayout.Y_AXIS)); - addPathSetting(filePanel, MODE_PATH_SERVICE); - addPathSetting(filePanel, MODE_PATH_WORKING); + settingsPanel.setLayout(new BoxLayout(settingsPanel, BoxLayout.Y_AXIS)); + addPathSetting(settingsPanel, MODE_PATH_SERVICE); + addPathSetting(settingsPanel, MODE_PATH_WORKING); //Settings - filePanel.add(createTitleBox(" Settings ", null)); - JCheckBox jCheckAtomNum = new JCheckBox("Show Atom Numbers");//.setAlignmentX(0.5f); + + JButton jbDefaults = new JButton("Set Defaults"); + jbDefaults.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + setDefaults(); + } + + }); + settingsPanel.add(createTitleBox(" Settings ", jbDefaults)); + jCheckAtomNum = new JCheckBox("Show Atom Numbers");//.setAlignmentX(0.5f); jCheckAtomNum.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -176,22 +187,18 @@ jCheckAtomNum.setSelected(true); Box settingsBox = createBorderBox(true); settingsBox.add(jCheckAtomNum); - - JCheckBox jCheckSelHalo = new JCheckBox("Show selection halos on atoms"); + + jCheckSelHalo = new JCheckBox("Show selection halos on atoms"); jCheckSelHalo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - runScriptNow("select " + ((JCheckBox) e.getSource()).isSelected()); + runScriptNow("select " + jCheckSelHalo.isSelected()); } }); jCheckSelHalo.doClick(); settingsBox.add(jCheckSelHalo); - color1 = "[" + orbColor1.getRed() + " " + orbColor1.getGreen() + " " - + orbColor1.getBlue() + "]"; - color2 = "[" + orbColor2.getRed() + " " + orbColor2.getGreen() + " " - + orbColor2.getBlue() + "]"; - final JCheckBox jCheckWireMesh = new JCheckBox( + jCheckWireMesh = new JCheckBox( "Use wire mesh for orbital display"); settingsBox.add(jCheckWireMesh); @@ -199,8 +206,9 @@ Color.cyan, Color.blue, Color.magenta, }; JPanel displayOps = new JPanel(new GridLayout(1, 4)); - displayOps.add(new JLabel("(+) color: ")); - final JComboBox<Color> colorBox1 = new JComboBox<Color>(colors); + JLabel label = new JLabel(" (+) color: "); + displayOps.add(label); + colorBox1 = new JComboBox<Color>(colors); colorBox1.setRenderer(new ColorRenderer()); colorBox1.setSelectedItem(orbColor1); displayOps.add(colorBox1); @@ -208,20 +216,16 @@ @Override public void actionPerformed(ActionEvent e) { orbColor1 = ((Color) colorBox1.getSelectedItem()); - color1 = "[" + orbColor1.getRed() + " " + orbColor1.getGreen() + " " - + orbColor1.getBlue() + "]"; setOrbitalDisplayOptions(); } }); - displayOps.add(new JLabel(" (-) color: ")); - final JComboBox<Color> colorBox2 = new JComboBox<Color>(colors); + displayOps.add(new JLabel(" (-) color: ")); + colorBox2 = new JComboBox<Color>(colors); colorBox2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { orbColor2 = ((Color) colorBox2.getSelectedItem()); - color2 = "[" + orbColor2.getRed() + " " + orbColor2.getGreen() + " " - + orbColor2.getBlue() + "]"; setOrbitalDisplayOptions(); } }); @@ -266,7 +270,8 @@ }); if (useWireMesh) jCheckWireMesh.setSelected(true); - JCheckBox jCheckNboView = new JCheckBox("Emulate NBO View"); + + jCheckNboView = new JCheckBox("Emulate NBO View"); settingsBox.add(jCheckNboView); jCheckNboView.addActionListener(new ActionListener() { @Override @@ -278,14 +283,15 @@ if (jCheckWireMesh.isSelected()) jCheckWireMesh.doClick(); opacity.setValue(3); - } else - resetColorScheme(); - + } else { + setDefaults(); + runScriptNow("background black;set defaultcolors Jmol;refresh;"); + } } }); - JCheckBox jb = new JCheckBox("Verbose Debugging"); - settingsBox.add(jb); - jb.addActionListener(new ActionListener() { + jCheckDebugVerbose = new JCheckBox("Verbose Debugging"); + settingsBox.add(jCheckDebugVerbose); + jCheckDebugVerbose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { debugVerbose = ((JCheckBox) e.getSource()).isSelected(); @@ -297,11 +303,35 @@ opacity.setValue((int) (opacityOp * 10)); } settingsBox.setBorder(BorderFactory.createLineBorder(Color.black)); - filePanel.add(settingsBox); - return filePanel; + settingsPanel.add(settingsBox); + return settingsPanel; } + protected void setDefaults() { + + nboService.setNBOProperty("orbitalDisplayOptions", "default"); + getOrbitalDisplayOptions(); + opacity.setValue((int) (opacityOp * 10)); + colorBox1.setSelectedItem(orbColor1); + colorBox2.setSelectedItem(orbColor2); + + jCheckWireMesh.setSelected(useWireMesh); + //jCheckWireMesh.doClick(); + jCheckAtomNum.setSelected(true); + //jCheckAtomNum.doClick(); + jCheckSelHalo.setSelected(true); + //jCheckSelHalo.doClick(); + jCheckDebugVerbose.setSelected(false); + //jCheckDebugVerbose.doClick(); + jCheckNboView.setSelected(false); + //jCheckNboView.doClick(); + } + protected void setOrbitalDisplayOptions() { + color1 = "[" + orbColor1.getRed() + " " + orbColor1.getGreen() + " " + + orbColor1.getBlue() + "]"; + color2 = "[" + orbColor2.getRed() + " " + orbColor2.getGreen() + " " + + orbColor2.getBlue() + "]"; String script = "nbo color " + color2 + " " + color1 + ";mo color " + color2 + " " + color1 + ";"; script += (useWireMesh ? "nbo nofill mesh;mo nofill mesh" @@ -314,8 +344,8 @@ } private String getOrbitalDisplayOptions() { - String options = nboService.getNBOProperty("orbitalDisplayOptions", null); - if (options == null) { + String options = nboService.getNBOProperty("orbitalDisplayOptions", "default"); + if (options.equals("default")) { orbColor1 = Color.blue; orbColor2 = Color.red; opacityOp = 0; @@ -336,7 +366,7 @@ return options; } - private void addPathSetting(JPanel filePanel, final int mode) { + private void addPathSetting(JPanel panel, final int mode) { //GUI for NBO path selection String title = ""; String path = ""; @@ -359,11 +389,11 @@ } }); - filePanel.add(createTitleBox(title, null)); + panel.add(createTitleBox(title, null)); Box serverBox = createBorderBox(true); serverBox.add(createPathBox(tfPath, mode)); serverBox.setMaximumSize(new Dimension(350, 50)); - filePanel.add(serverBox); + panel.add(serverBox); //Job files // @@ -499,25 +529,16 @@ * Sets color scheme to emulate look of NBO view */ protected void setNBOColorScheme() { - nboView = true; - String atomColors = ""; - String fname = "org/openscience/jmol/app/nbo/help/atomColors.txt"; try { - atomColors = GuiMap.getResourceString(this, fname); + String atomColors = ""; + atomColors = GuiMap.getResourceString(this, "org/gennbo/help/atomColors.txt"); + runScriptNow(atomColors + ";refresh"); + nboView = true; } catch (IOException e) { alertError("Atom colors not found"); } - runScriptNow(atomColors + ";refresh"); } - /** - * Resets Jmol look and feel - */ - protected void resetColorScheme() { - nboView = false; - runScriptNow("background black;set defaultcolors Jmol;refresh;"); - } - // /** // * sets components visible recursively // * @param c @@ -539,7 +560,7 @@ */ protected void showAtomNums(boolean alpha) { if (!showAtNum) { - runScriptNow("select {*};label off; select remove {*}"); + runScriptNow("select {*};label off; select none"); return; } SB sb = new SB(); @@ -550,7 +571,7 @@ sb.append("select {*};color labels white;"); sb.append("select {H*};color labels " + color + ";" - + "set labeloffset 0 0 {*}; select remove {*};"); + + "set labeloffset 0 0 {*}; select none;"); runScriptNow(sb.toString()); } @@ -617,8 +638,7 @@ * p, b, r ("red"), i, etc. */ protected synchronized void log(String line, char chFormat) { - if (line.trim().equals("") || jpNBOLog == null || !debugVerbose - && "b|r".indexOf("" + chFormat) < 0) + if (dontLog(line, chFormat)) return; if (line.trim().length() >= 1) { line = PT.rep(line.trim(), "<", "<"); @@ -640,6 +660,13 @@ jpNBOLog.setCaretPosition(jpNBOLog.getDocument().getLength()); } + private boolean dontLog(String line, char chFormat) { + return (jpNBOLog == null + || line.trim().equals("") + || line.indexOf("read/unit=5/attempt to read past end") >= 0 + || !debugVerbose && "b|r".indexOf("" + chFormat) < 0); + } + protected void alertError(String line) { log(line, 'r'); vwr.alert(line); Modified: trunk/Jmol/src/org/gennbo/NBODialogRun.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -331,6 +331,44 @@ // return true; // } + + /** + * gets a valid $CHOOSE list from nbo file if it exists and corrects the bonds + * in the Jmol model + * + * + * @return false if output contains error + */ + protected boolean getChooseList() { + File f = NBOFileHandler.newNBOFile(inputFileHandler.inputFile, "nbo"); + if (!f.exists() || f.length() == 0) + return false; + String fdata = inputFileHandler.getFileData(f.toString()); + String[] tokens = PT.split(fdata, "\n $CHOOSE"); + int i = 1; + if (tokens.length < 2) { + logInfo("$CHOOSE record was not found in " + f, + Logger.LEVEL_INFO); + return false; + } + if (tokens[1].trim().startsWith("keylist")) { + if (!tokens[1].contains("Structure accepted:")) { + if (tokens[1].contains("missing END?")) { + logInfo("Plot files not found. Have you used RUN yet?", + Logger.LEVEL_ERROR); + return false; + } else if (tokens[2].contains("ignoring")) { + System.out.println("Ignoring $CHOOSE list"); + } else { + return false; + } + } + i = 3; + } + setChooseList(tokens[i].substring(0, tokens[i].indexOf("$END"))); + return true; + } + protected void setChooseList(String data) { chooseList = new ChooseList(); String[] tokens = PT.split(data, "END"); @@ -652,15 +690,10 @@ fileData = inputFileHandler.read47File(); nboKeywords = cleanNBOKeylist(fileData[1]); - if (inputFileHandler.useExt.equals("47")) { - if (!inputFileHandler.getChooseList()) { - File f = NBOFileHandler.newNBOFile(inputFileHandler.inputFile, "nbo"); - if (f.exists()) - logInfo("Error reading $CHOOSE list", Logger.LEVEL_ERROR); - } else - setBonds(true); - } + if (inputFileHandler.useExt.equals("47")) + getChooseList(); showAtomNums(true); + setBonds(true); addNBOKeylist(); for (Component c : panel.getComponents()) c.setVisible(true); Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -1000,7 +1000,7 @@ if (list.equals(list3)) { changeKey(nrt); //Parsing RS list here ensures RS list will be in .nbo file - parseRsList(inputFileHandler.getRSList()); + parseRsList(getRSList()); unit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -1046,6 +1046,29 @@ } } + protected String[] getRSList() { + String data = inputFileHandler.getInputFile("nbo"); + String[] toks = PT.split(data, + "TOPO matrix for the leading resonance structure:\n"); + if (toks.length < 2) { + if (toks[0].contains("0 candidate reference structure(s)")) + alertError("0 candidate reference structure(s) calculated by SR LEWIS" + + "Candidate reference structure taken from NBO search"); + return null; + } + String[] toks2 = PT + .split(toks[1], + "---------------------------------------------------------------------------"); + String[] rsList = new String[2]; + rsList[0] = toks2[0].substring(toks2[0].lastIndexOf('-'), + toks2[0].indexOf("Res")).trim(); + rsList[0] = rsList[0].replace("-\n", ""); + rsList[1] = toks2[1]; + return rsList; + } + + + /** * Takes two strings from .nbo file and parses RS list information toks[0] = * primary rs matrix toks[1] = change list using accountants notation @@ -1361,8 +1384,8 @@ alphaSpin.setVisible(false); betaSpin.setVisible(false); } - if (!inputFileHandler.getChooseList()) - alertError("Error reading $CHOOSE list"); + + getChooseList(); showAtomNums(true); setBonds(true); Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -481,6 +481,7 @@ protected void setOrbitalColors(char plusMinus) { currSign = plusMinus; + // just for one orbital? runScriptNow("nbo color " + (plusMinus == '+' ? color2 + " " + color1 : color1 + " " + color2)); } @@ -1427,10 +1428,7 @@ resetValues(); settingsBox.setVisible(true); - // for(int i = 0; i < 5; i++) - // panel.getComponents()[i].setVisible(true); - if (!inputFileHandler.getChooseList()) - logInfo("Error reading $CHOOSE list", Logger.LEVEL_ERROR); + getChooseList(); showAtomNums(true); colorMeshes(); alphaSpin.setVisible(isOpenShell); Modified: trunk/Jmol/src/org/gennbo/NBOFileHandler.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOFileHandler.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/gennbo/NBOFileHandler.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -153,6 +153,8 @@ //return false; if (dialog.dialogMode == NBODialog.DIALOG_MODEL) return true; + // DP? if(!inputFile.getAbsolutePath().endsWith(".47")) + // DP? inputFile = newNBOFile(inputFile, "47"); if (!useExt.equals("47")) { jobStem = NBOFileHandler.getJobStem(inputFile); dialog.loadModelFromNBO(fileDir, jobStem, useExt); @@ -287,67 +289,6 @@ return false; } - /** - * gets a valid $CHOOSE list from nbo file if it exists and corrects the bonds - * in the jmol model - * - * @return false if output contains error - */ - protected boolean getChooseList() { - File f = newNBOFile(inputFile, "nbo"); - if (!f.exists() || f.length() == 0) - return false; - String fdata = getFileData(f.toString()); - String[] tokens = PT.split(fdata, "\n $CHOOSE"); - int i = 1; - if (tokens.length < 2) { - dialog.logInfo("$CHOOSE record was not found in " + f, - Logger.LEVEL_INFO); - return false; - } - if (tokens[1].trim().startsWith("keylist")) { - if (!tokens[1].contains("Structure accepted:")) { - if (tokens[1].contains("missing END?")) { - dialog.logInfo("Plot files not found. Have you used RUN yet?", - Logger.LEVEL_ERROR); - return false; - } else if (tokens[2].contains("ignoring")) { - dialog.alert("Ignoring $CHOOSE list"); - } else { - return false; - } - } - i = 3; - } - String data = tokens[i].substring(0, tokens[i].indexOf("$END")); - - dialog.setChooseList(data); - - return true; - } - - protected String[] getRSList() { - String data = getFileData(newNBOFile(inputFile, "nbo").toString()); - String[] toks = PT.split(data, - "TOPO matrix for the leading resonance structure:\n"); - if (toks.length < 2) { - if (toks[0].contains("0 candidate reference structure(s)")) - dialog - .alertError("0 candidate reference structure(s) calculated by SR LEWIS" - + "Candidate reference structure taken from NBO search"); - return null; - } - String[] toks2 = PT - .split(toks[1], - "---------------------------------------------------------------------------"); - String[] rsList = new String[2]; - rsList[0] = toks2[0].substring(toks2[0].lastIndexOf('-'), - toks2[0].indexOf("Res")).trim(); - rsList[0] = rsList[0].replace("-\n", ""); - rsList[1] = toks2[1]; - return rsList; - } - public void clear() { tfName.setText(""); tfExt.setText(""); @@ -412,4 +353,8 @@ btnBrowse.setEnabled(b); } + public String getInputFile(String name) { + return getFileData(newNBOFile(inputFile, name).toString()); + } + } Added: trunk/Jmol/src/org/gennbo/NBOPlugin.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOPlugin.java (rev 0) +++ trunk/Jmol/src/org/gennbo/NBOPlugin.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -0,0 +1,78 @@ +/* $RCSfile$ + * $Author: hansonr $ + * $Date: 2014-12-13 22:43:17 -0600 (Sat, 13 Dec 2014) $ + * $Revision: 20162 $ + * + * Copyright (C) 2002-2005 The Jmol Development Team + * + * Contact: jmo...@li... + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ +package org.gennbo; + +import javax.swing.JFrame; + +import org.jmol.c.CBK; +import org.jmol.viewer.Viewer; +import org.openscience.jmol.app.JmolPlugin; + +public class NBOPlugin implements JmolPlugin { + + protected NBODialog nboDialog; + protected Viewer vwr; + + public final static String version = "0.1.1"; + + @Override + public void start(JFrame frame, Viewer vwr) { + this.vwr = vwr; + nboDialog = new NBODialog(this, frame, vwr); + System.out.println("NBO Plugin started."); + } + + @Override + public String getName() { + return "NBO"; + } + + @Override + public String getVersion() { + return version; + } + + @Override + public void setVisible(boolean b) { + if (nboDialog == null) + return; + nboDialog.setVisible(b); + } + + @Override + public void destroy() { + if (nboDialog == null) + return; + nboDialog.close(); + nboDialog = null; + } + + @Override + public void notifyCallback(CBK type, Object[] data) { + if (nboDialog == null) + return; + nboDialog.notifyCallback(type, data); + } + +} Property changes on: trunk/Jmol/src/org/gennbo/NBOPlugin.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Modified: trunk/Jmol/src/org/gennbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOService.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/gennbo/NBOService.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -82,7 +82,7 @@ // 1 1 2 // // jmol_outfile.txt is: - + // DATA " " // 1 1 2 // NBOServe: NATURAL BOND ORBITAL PROGRAM SUITE @@ -128,21 +128,18 @@ // GLOBAL C_PATH C:\temp // GLOBAL C_JOBSTEM ch3nh2 // CMD VIEW 1 - - - + // modes of operation - + // NOTE: There was a problem in that View and Raw were both 4 here - + static final int MODE_ERROR = -1; static final int MODE_RAW = 0;// leave this 0; it is referred to that in StatusListener - // these are for panel state static final int MODE_MODEL = 1; // don't change this number -- it is used for LOAD NBO static final int MODE_RUN = 20; - + // these are for rawCmdNew only static final int MODE_VALUE = 45; static final int MODE_LIST = 46; @@ -153,44 +150,44 @@ //static final int MODE_VALUE_M = 60; static final int MODE_GETRS = 61; static final int MODE_LABEL_BONDS = 62; + protected int count; + protected boolean isWorking; protected Viewer vwr; - - NBODialog nboDialog; - protected Process nboServer; protected Thread nboListener; - private InputStream stdout; protected BufferedReader nboReader; + protected NBODialog nboDialog; + protected NBOJob currJob; + protected Object lock; + protected Queue<NBOJob> jobQueue; + private PrintWriter stdinWriter; + private InputStream stdout; private SB sbRet; - private boolean inData; - protected boolean isWorking; + private boolean cantStartServer; private String serverPath; - private String serverDir; private String nboModel; - - NBOJob currJob; - Queue<NBOJob> jobQueue; - protected Object lock; - private boolean cantStartServer; + private String exeName = "NBOServe.exe"; - + /** * Manage communication between Jmol and NBOServer + * @param nboDialog * * @param vwr * The interacting display we are reproducing (source of view angle * info etc) */ - public NBOService(Viewer vwr) { + public NBOService(NBODialog nboDialog, Viewer vwr) { + this.nboDialog = nboDialog; this.vwr = vwr; sbRet = new SB(); - setServerPath(getNBOProperty("serverPath", - System.getProperty("user.home") + "/NBOServe")); + setServerPath(getNBOProperty("serverPath", System.getProperty("user.home") + + "/NBOServe")); jobQueue = new ArrayDeque<NBOJob>(); lock = new Object(); } @@ -198,11 +195,12 @@ boolean isOffLine() { return cantStartServer; } - + /** * Return path to NBOServe directory. * - * @param fileName or null for path itself, without slash + * @param fileName + * or null for path itself, without slash * * @return path */ @@ -224,7 +222,6 @@ return serverPath != null; } - protected String getNBOProperty(String name, String defaultValue) { return JmolPanel.getPluginOption("NBO", name, defaultValue); } @@ -234,14 +231,14 @@ JmolPanel.setPluginOption("NBO", name, option); } - /** * @param job */ protected void sendToNBO(NBOJob job) { String s = "<" + job.cmd + ">"; currJob = job; - nboDialog.inputFileHandler.writeToFile(serverDir + "/" + job.cmd, job.sb.toString()); + nboDialog.inputFileHandler.writeToFile(getServerPath(job.cmd), + job.sb.toString()); nboDialog.setStatus(job.statusInfo + " (sending job.cmd)"); sendCmd(s); } @@ -249,7 +246,7 @@ private void sendCmd(String s) { count = 1; System.out.println("sending " + s); - if(stdinWriter == null) + if (stdinWriter == null) restart(); stdinWriter.println(s); stdinWriter.flush(); @@ -294,13 +291,13 @@ int pt = line.indexOf("\n"); return (pt < 0 ? line + s : line.substring(0, pt) + s + line.substring(pt)); } - + String startProcess(boolean sync, @SuppressWarnings("unused") final int mode) { try { System.out.println("starting NBO process sync=" + sync); - File pathToExecutable = new File(serverPath + "/" + exeName ); - ProcessBuilder builder = new ProcessBuilder(serverPath + "/" + exeName); - builder.directory(new File(pathToExecutable.getParent())); // this is where you set the root folder for the executable to run with + String path = getServerPath(exeName); + ProcessBuilder builder = new ProcessBuilder(path); + builder.directory(new File(new File(path).getParent())); // root folder for executable builder.redirectErrorStream(true); nboServer = builder.start(); stdout = nboServer.getInputStream(); @@ -427,13 +424,13 @@ nboAddModelLine(line); } break; -// case MODE_VALUE_M: -// if (line.indexOf("DATA") >= 0) -// isWorking = inRequest = false; -// if (inRequest && isWorking) -// nboDialog.processModelLine(line); -// break; -// + // case MODE_VALUE_M: + // if (line.indexOf("DATA") >= 0) + // isWorking = inRequest = false; + // if (inRequest && isWorking) + // nboDialog.processModelLine(line); + // break; + // case MODE_GETRS: if (inRequest && isWorking) { int cnt = Integer.parseInt(line.trim()); @@ -469,14 +466,15 @@ } private int lineNo = 0; + protected void logServerLine(String line) { - nboDialog.logInfo((++lineNo) + "< " + line, isFortranError(line) ? Logger.LEVEL_ERROR : Logger.LEVEL_DEBUG); - } - + nboDialog.logInfo((++lineNo) + "< " + line, + isFortranError(line) ? Logger.LEVEL_ERROR : Logger.LEVEL_DEBUG); + } + protected boolean isFortranError(String line) { return line.indexOf("Permission denied") >= 0 - || line.indexOf("PGFIO-F") >= 0 - || line.indexOf("Invalid command") >= 0; + || line.indexOf("PGFIO-F") >= 0 || line.indexOf("Invalid command") >= 0; } public void closeProcess() { @@ -493,7 +491,7 @@ } nboReader = null; try { - nboListener.interrupt(); + nboListener.interrupt(); } catch (Exception e) { System.out.println("can't interrupt"); } @@ -515,46 +513,44 @@ startProcess(false, MODE_RAW); return (nboServer != null); } - /** * The interface for ALL communication with NBOServe from NBODialog. + * * @param cmd * @param data - * @param dialogMode - * @param list - * @param status + * @param dialogMode + * @param list + * @param status */ protected void rawCmdNew(String cmd, SB data, int dialogMode, DefaultComboBoxModel<String> list, String status) { - if(dialogMode == MODE_LABEL){ - nboDialog.runScriptNow("mo delete; nbo delete"); + if (dialogMode == MODE_LABEL) { + nboDialog.runScriptNow("mo delete; nbo delete"); + } + String fname = null; + synchronized (lock) { + if (data == null) { + nboDialog.logInfo("> " + cmd, Logger.LEVEL_DEBUG); + } else { + fname = cmd + "_cmd.txt"; + nboDialog.logInfo("> " + fname + "\n" + data, Logger.LEVEL_DEBUG); + cmd = "<" + fname + ">"; + isWorking = true; } - String fname = null; - synchronized(lock){ - if (data == null) { - nboDialog.logInfo("> " + cmd, Logger.LEVEL_DEBUG); - } else { - fname = cmd + "_cmd.txt"; - nboDialog.logInfo("> " + fname + "\n" + data, Logger.LEVEL_DEBUG); - cmd = "<" + fname + ">"; - isWorking = true; - } - if(jobQueue.isEmpty()){ - currJob = new NBOJob(fname,data, status, list); - jobQueue.add(currJob); - currJob.dialogMode = dialogMode; - sendToNBO(currJob); - } - else{ - NBOJob j = new NBOJob(fname,data, status, list); - j.dialogMode = dialogMode; - jobQueue.add(j); - } - } + if (jobQueue.isEmpty()) { + currJob = new NBOJob(fname, data, status, list); + jobQueue.add(currJob); + currJob.dialogMode = dialogMode; + sendToNBO(currJob); + } else { + NBOJob j = new NBOJob(fname, data, status, list); + j.dialogMode = dialogMode; + jobQueue.add(j); + } + } } - class NBOJob { String cmd; String statusInfo; @@ -577,7 +573,8 @@ String arch = System.getenv("PROCESSOR_ARCHITECTURE"); File f = new File(getServerPath("gennbo.bat")); if (!f.exists()) { - vwr.alert(f + " not found, make sure gennbo.bat is in same directory as " + exeName); + vwr.alert(f + " not found, make sure gennbo.bat is in same directory as " + + exeName); return false; } String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432"); @@ -603,6 +600,8 @@ return true; } + public void clearQueue() { + jobQueue.clear(); + } - -} \ No newline at end of file +} Added: trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java (rev 0) +++ trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -0,0 +1,15 @@ +package org.openscience.jmol.app; + +import javax.swing.JFrame; + +import org.jmol.c.CBK; +import org.jmol.viewer.Viewer; + +public interface JmolPlugin { + void start(JFrame frame, Viewer viewer); + void destroy(); + String getVersion(); + String getName(); + void setVisible(boolean b); + void notifyCallback(CBK type, Object[] data); +} Property changes on: trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -52,8 +52,10 @@ import java.util.Hashtable; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; +import javajs.util.Lst; import javajs.util.PT; import javax.swing.AbstractAction; @@ -94,6 +96,7 @@ import org.openscience.jmol.app.HistoryFile; import org.openscience.jmol.app.Jmol; import org.openscience.jmol.app.JmolApp; +import org.openscience.jmol.app.JmolPlugin; import org.openscience.jmol.app.SplashInterface; import org.openscience.jmol.app.jmolpanel.console.AppConsole; import org.openscience.jmol.app.jmolpanel.console.ConsoleTextArea; @@ -118,19 +121,13 @@ StatusBar status; int startupWidth, startupHeight; JsonNioServer serverService; - public NBOService nboService; // Called by NBODialog - public void setNBOService(NBOService service) { - this.nboService = service; - } - protected String appletContext; protected PropertyChangeSupport pcs = new PropertyChangeSupport(this); protected DisplayPanel display; protected GaussianDialog gaussianDialog; - protected NBODialog nboDialog; protected RecentFilesDialog recentFiles; protected AtomSetChooser atomSetChooser; public JFrame frame; @@ -285,23 +282,6 @@ say(GT._("Initializing Script Window...")); vwr.getProperty("DATA_API", "getAppConsole", Boolean.TRUE); - // Setup Plugin system - // say(GT._("Loading plugins...")); - // pluginManager = new CDKPluginManager( - // System.getProperty("user.home") + System.getProperty("file.separator") - // + ".jmol", new JmolEditBus(vwr) - // ); - // pluginManager.loadPlugin("org.openscience.cdkplugin.dirbrowser.DirBrowserPlugin"); - // pluginManager.loadPlugin("org.openscience.cdkplugin.dirbrowser.DadmlBrowserPlugin"); - // pluginManager.loadPlugins( - // System.getProperty("user.home") + System.getProperty("file.separator") - // + ".jmol/plugins" - // ); - // feature to allow for globally installed plugins - // if (System.getProperty("plugin.dir") != null) { - // pluginManager.loadPlugins(System.getProperty("plugin.dir")); - // } - // install the command table say(GT._("Building Command Hooks...")); commands = new Hashtable<String, Action>(); @@ -608,6 +588,8 @@ dispose(frame, saveSize); return true; } + + Map<String, JmolPlugin> plugins = new Hashtable<String, JmolPlugin>(); void dispose(JFrame f, boolean saveSize) { // Save window positions and status in the history @@ -623,14 +605,16 @@ serverService.close(); serverService = null; } - if(nboDialog != null){ - nboDialog.close(); - nboDialog = null; + + for (Entry<String, JmolPlugin> e : plugins.entrySet()) { + try { + e.getValue().destroy(); + } catch (Throwable err) { + // ignore + } } - if(nboService != null){ - nboService.closeProcess(); - nboService = null; - } + plugins.clear(); + if (numWindows <= 1) { // Close Jmol report(GT._("Closing Jmol...")); @@ -1173,19 +1157,24 @@ */ void startNBO(String type) { - String nboServerPath = historyFile.getProperty("nboServerPath", null); + String nboServerPath = getPluginOption("NBO", "serverPath", null); if (nboServerPath == null) { vwr.alert("NBOServe.exe has not been installed. See http://nbo6.chem.wisc.edu/new6_css.htm for additional information"); - return; } + showPlugin("NBO", "org.gennbo.NBOPlugin"); + } - if (nboDialog == null) - nboDialog = (NBODialog) getInstanceWithParams("org.gennbo.NBODialog", - new Class[] { JFrame.class, Viewer.class }, frame, vwr ); - if (nboDialog == null) { - vwr.alert("The NBODialog class could not be found."); - } else { - nboDialog.setVisible(true); + private void showPlugin(String name, String path) { + try { + JmolPlugin p = plugins.get(name); + if (p == null) { + plugins.put(name, p = (JmolPlugin) Interface.getInterface(path, vwr, + "plugin")); + p.start(frame, vwr); + } + p.setVisible(true); + } catch (Throwable e) { + System.out.println("Error creating plugin " + name); } } @@ -1708,10 +1697,8 @@ gaussianDialog.dispose(); gaussianDialog = null; } - if (nboDialog != null) { - nboDialog.dispose(); - nboDialog = null; - } + + boolean doTranslate = GT.setDoTranslate(true); getDialogs(); GT.setDoTranslate(doTranslate); Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java 2017-01-25 18:12:49 UTC (rev 21345) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java 2017-01-25 20:52:14 UTC (rev 21346) @@ -43,6 +43,7 @@ import org.jmol.dialog.Dialog; import org.jmol.util.Logger; import org.jmol.viewer.Viewer; +import org.openscience.jmol.app.JmolPlugin; import org.openscience.jmol.app.jmolpanel.console.AppConsole; import org.openscience.jmol.app.webexport.WebExport; @@ -122,8 +123,9 @@ @SuppressWarnings("unchecked") @Override public void notifyCallback(CBK type, Object[] data) { - if (jmol.nboDialog != null) - jmol.nboDialog.notifyCallback(type, data); + if (!jmol.plugins.isEmpty()) + for (JmolPlugin p : jmol.plugins.values()) + p.notifyCallback(type, data); String strInfo = (data == null || data[1] == null ? null : data[1] .toString()); Map<String, Object> info; @@ -149,10 +151,10 @@ if (jmol.frame != null) { //Font f = jmol.frame.getFont(); //if (f != null) { - //int m = jmol.frame.getFontMetrics(f).stringWidth("M"); - //int n = jmol.frame.getWidth() / m; - //if (n < menuName.length()) - //menuName = menuName.substring(0, n) + "..."; + //int m = jmol.frame.getFontMetrics(f).stringWidth("M"); + //int n = jmol.frame.getWidth() / m; + //if (n < menuName.length()) + //menuName = menuName.substring(0, n) + "..."; //} jmol.frame.setTitle(menuName); } @@ -190,7 +192,7 @@ String service = (String) info.get("service"); if ("nbo".equals(service)) { if ("showPanel".equals(info.get("action"))) - jmol.startNBO(null); + jmol.startNBO(null); //else //jmol.getNBOService().processRequest(info, 0); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-26 22:29:21
|
Revision: 21355 http://sourceforge.net/p/jmol/code/21355 Author: hansonr Date: 2017-01-26 22:29:18 +0000 (Thu, 26 Jan 2017) Log Message: ----------- NBO message ***errmess*** isosurface enables NBO option; still not for alpha/beta Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOService.java trunk/Jmol/src/org/jmol/scriptext/IsoExt.java Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-26 14:20:52 UTC (rev 21354) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-26 22:29:18 UTC (rev 21355) @@ -788,13 +788,13 @@ NBOFileHandler.getExt(inputFileHandler.inputFile).equals("47")); } - public void setStatus(String statusInfo) { + void setStatus(String statusInfo) { if (statusInfo.length() > 0) log(statusInfo, 'p'); statusLab.setText(statusInfo); } - public void processEnd(int dialogMode, AbstractListModel<String> list) { + void processEnd(int dialogMode, AbstractListModel<String> list) { statusLab.setText(""); switch (dialogMode) { case NBOService.MODE_IMAGE: @@ -822,11 +822,15 @@ setStatus("OK mode=" + dialogMode); } - public void loadFromHandler(File file) { + void loadFromHandler(File file) { isNewModel = true; if (dialogMode == DIALOG_VIEW) setViewerBasis(); else loadModelFileQueued(file, false, false); } + + void setLicense(String line) { + licenseInfo.setText("<html><div style='text-align: center'>" + line + "</html>"); + } } Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-26 14:20:52 UTC (rev 21354) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-26 22:29:18 UTC (rev 21355) @@ -1725,7 +1725,8 @@ DefaultListModel<String> model = (DefaultListModel<String>) getModel(); String script = "select all"; String beta = (betaSpin.isSelected() ? " beta" : ""); - + String type = basis.getSelectedItem().toString(); + // get only the ones needing changing BS bsSel = new BS(); int[] selected = getSelectedIndices(); @@ -1749,7 +1750,7 @@ String id = "mo" + i; script += ";select *;if (" + bsKnown.get(i) + "){isosurface " + id + " on} else {isosurface " + id + " color " + (bsNeg.get(i) ? color1 + " " + color2 : color2 + " " + color1) - + " cutoff 0.0316 MO " + (i + 1) + beta + " frontonly " + + " cutoff 0.0316 NBO " + type + " " + (i + 1) + beta + " frontonly " + (useWireMesh ? " mesh nofill" : " nomesh fill translucent " + opacityOp) + "}"; } Modified: trunk/Jmol/src/org/gennbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOService.java 2017-01-26 14:20:52 UTC (rev 21354) +++ trunk/Jmol/src/org/gennbo/NBOService.java 2017-01-26 22:29:18 UTC (rev 21355) @@ -310,13 +310,18 @@ //boolean haveStart = false; boolean inOpener = false; boolean inRequest = false; + boolean inError = false; System.out.println("nboListener " + this + " running"); while (!Thread.currentThread().isInterrupted()) { String line = null; try { while ((line = nboReader.readLine()) != null) { - - logServerLine(line); + if (line.indexOf("***errmess***") == 0) { + logServerLine(line, false); + inError = !inError; + continue; + } + logServerLine(line, inError); // ignore the opener business if (line.indexOf("DATA \" \"") >= 0) { //nboDialog.logInfo(" DATA...", Logger.LEVEL_INFO); @@ -349,10 +354,8 @@ nboDialog.alertError("NBOServe has stopped working"); restart(); } - if (line.indexOf("NBOServe") >= 0) { - nboDialog.licenseInfo - .setText("<html><div style='text-align: center'>" + line - + "</html>"); + if (line.indexOf("NBOServe v") >= 0) { + nboDialog.setLicense(line); isWorking = false; continue; } @@ -467,14 +470,16 @@ private int lineNo = 0; - protected void logServerLine(String line) { + protected void logServerLine(String line, boolean inError) { + nboDialog.logInfo((++lineNo) + "< " + line, - isFortranError(line) ? Logger.LEVEL_ERROR : Logger.LEVEL_DEBUG); + isFortranError(line) || inError ? Logger.LEVEL_ERROR : Logger.LEVEL_DEBUG); } protected boolean isFortranError(String line) { return line.indexOf("Permission denied") >= 0 - || line.indexOf("PGFIO-F") >= 0 || line.indexOf("Invalid command") >= 0; + || line.indexOf("PGFIO-F") >= 0 + || line.indexOf("Invalid command") >= 0; } public void closeProcess() { Modified: trunk/Jmol/src/org/jmol/scriptext/IsoExt.java =================================================================== --- trunk/Jmol/src/org/jmol/scriptext/IsoExt.java 2017-01-26 14:20:52 UTC (rev 21354) +++ trunk/Jmol/src/org/jmol/scriptext/IsoExt.java 2017-01-26 22:29:18 UTC (rev 21355) @@ -1016,8 +1016,8 @@ @SuppressWarnings("unchecked") - private void setNBOType(Map<String, Object> moData, String type) - throws ScriptException { + private void setNBOType(Map<String, Object> moData, String type, + boolean isBeta) throws ScriptException { // 31 32 33 34 35 36 37 38 39 40 41 int ext = ";AO; ;PNAO;;NAO; ;PNHO;;NHO; ;PNBO;;NBO; ;PNLMO;NLMO;;MO; ;NO;" .indexOf(";" + type + ";"); @@ -1030,7 +1030,8 @@ if (chk) return; try { - Lst<Map<String, Object>> orbitals = (Lst<Map<String, Object>>) moData.get(type + "_coefs"); + Lst<Map<String, Object>> orbitals = (Lst<Map<String, Object>>) moData + .get(type + "_coefs"); if (orbitals == null) { String fileName = moData.get("nboRoot") + "." + ext; String data = vwr.getFileAsString3(fileName, true, null); @@ -1045,8 +1046,17 @@ orbitals.addLast(mo); mo.put("dfCoefMaps", dfCoefMaps); } - ((QS) Interface.getInterface("org.jmol.quantum.QS", vwr, "script")).setNboLabels(nboLabels, n, orbitals, 0, type); + ((QS) Interface.getInterface("org.jmol.quantum.QS", vwr, "script")) + .setNboLabels(nboLabels, n, orbitals, 0, type); data = data.substring(data.lastIndexOf("--") + 2); + if (data.indexOf("alpha") >= 0) { + if (isBeta) { + if (data.indexOf("beta") >= 0) + data = data.substring(data.indexOf("beta") + 4); + else + data = ""; + } + } int len = data.length(); int[] next = new int[1]; for (int i = 0; i < n; i++) { @@ -1112,7 +1122,7 @@ error(ScriptError.ERROR_moModelError); vwr.checkMenuUpdate(); if (nboType != null) { - setNBOType(moData, nboType); + setNBOType(moData, nboType, isBeta); if (lc == null && moNumber == Integer.MAX_VALUE) return; } @@ -1246,6 +1256,7 @@ boolean haveSlab = false; boolean haveIntersection = false; boolean isFrontOnly = false; + String nbotype = null; float[] data = null; String cmd = null; int thisSetNumber = Integer.MIN_VALUE; @@ -1870,7 +1881,12 @@ error(ScriptError.ERROR_expressionExpected); } break; + case T.nbo: + nbotype = paramAsStr(++i).toUpperCase(); + sbCommand.append(" nbo ").append(nbotype).append(" "); case T.mo: + if (nbotype == null) + sbCommand.append(" mo "); // mo 1-based-index int moNumber = Integer.MAX_VALUE; int offset = Integer.MAX_VALUE; @@ -1883,7 +1899,7 @@ eval.bad(); break; case T.density: - sbCommand.append("mo [1] squared "); + sbCommand.append("[1] squared "); addShapeProperty(propertyList, "squareLinear", Boolean.TRUE); linearCombination = new float[] { 1 }; offset = moNumber = 0; @@ -1895,7 +1911,7 @@ moNumber = 0; i = eval.iToken; //if (surfaceObjectSeen) { - sbCommand.append(" mo " + (isNegOffset ? "-" : "") + "HOMO "); + sbCommand.append((isNegOffset ? "-" : "") + "HOMO "); if (offset > 0) sbCommand.append("+"); if (offset != 0) @@ -1905,7 +1921,7 @@ case T.integer: moNumber = intParameter(i); //if (surfaceObjectSeen) - sbCommand.append(" mo ").appendI(moNumber); + sbCommand.appendI(moNumber); if (tokAt(i + 1) == T.beta) { isBeta = true; i++; @@ -1935,7 +1951,7 @@ .appendI(seed); } setMoData(propertyList, moNumber, linearCombination, offset, - isNegOffset, modelIndex, null, null, isBeta); + isNegOffset, modelIndex, null, nbotype, isBeta); surfaceObjectSeen = true; continue; case T.nci: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-27 21:29:36
|
Revision: 21356 http://sourceforge.net/p/jmol/code/21356 Author: hansonr Date: 2017-01-27 21:29:33 +0000 (Fri, 27 Jan 2017) Log Message: ----------- NBO refactoring, View orbital list enhancements, MO/NBO/Isosurface reporting integration now Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/gennbo/NBODialogRun.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/jmol/jvxl/data/JvxlData.java trunk/Jmol/src/org/jmol/jvxl/readers/IsoMOReader.java trunk/Jmol/src/org/jmol/jvxl/readers/SurfaceReader.java trunk/Jmol/src/org/jmol/quantum/MOCalculation.java trunk/Jmol/src/org/jmol/quantum/QuantumCalculation.java trunk/Jmol/src/org/jmol/scriptext/CmdExt.java trunk/Jmol/src/org/jmol/scriptext/IsoExt.java trunk/Jmol/src/org/jmol/shapesurface/Isosurface.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -140,6 +140,8 @@ //get saved properties createDialog(jmolFrame.getBounds()); + + setDefaults(false); } @@ -812,7 +814,7 @@ break; case DIALOG_VIEW: if (list != null) - setLastOrbitalSelection(); + orbitals.setLastOrbitalSelection(); break; case DIALOG_SEARCH: if (list != null) @@ -821,6 +823,18 @@ } setStatus("OK mode=" + dialogMode); } + + /** + * user has made changes to the settings, so we need to update panels + */ + @Override + protected void updatePanelSettings() { + switch (dialogMode) { + case DIALOG_VIEW: + setNewBasis(); + break; + } + } void loadFromHandler(File file) { isNewModel = true; @@ -833,4 +847,9 @@ void setLicense(String line) { licenseInfo.setText("<html><div style='text-align: center'>" + line + "</html>"); } + + protected NBOFileHandler newNBOFileHandler(String name, String ext, int mode, String useExt) { + return new NBOFileHandler(name, ext, mode, useExt, this); + } + } Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -74,11 +74,16 @@ abstract class NBODialogConfig extends JDialog { - static final char DIALOG_HOME = 'h'; + abstract protected void updatePanelSettings(); + + abstract protected NBOFileHandler newNBOFileHandler(String name, String ext, + int mode, String useExt); + + static final char DIALOG_HOME = 'h'; static final char DIALOG_SEARCH = 's'; - static final char DIALOG_VIEW = 'v'; - static final char DIALOG_RUN = 'r'; - static final char DIALOG_MODEL = 'm'; + static final char DIALOG_VIEW = 'v'; + static final char DIALOG_RUN = 'r'; + static final char DIALOG_MODEL = 'm'; static final char DIALOG_CONFIG = 'c'; private static final String DEFAULT_SCRIPT = "set bondpicking true;set multipleBondSpacing -0.5;set zoomlarge false;select none;"; @@ -122,15 +127,16 @@ protected JLabel statusLab; protected JTextPane jpNBOLog; protected JSlider opacity = new JSlider(0, 10); - protected JPanel settingsPanel; + protected JPanel settingsPanel; protected JComboBox<Color> colorBox1, colorBox2; - protected JCheckBox jCheckAtomNum, jCheckSelHalo, jCheckDebugVerbose, jCheckNboView, jCheckWireMesh; - + protected JCheckBox jCheckAtomNum, jCheckSelHalo, jCheckDebugVerbose, + jCheckNboView, jCheckWireMesh; + protected ChooseList chooseList; protected String bodyText = ""; protected boolean showAtNum, nboView, useWireMesh; - protected Color orbColor1, orbColor2; + protected Color orbColor1, orbColor2, backgroundColor; protected String color1, color2; protected float opacityOp; @@ -162,8 +168,9 @@ /** * Creates a dialog for getting info related to output frames in nbo format. - * @param settingsPanel * + * @param settingsPanel + * * @return settings panel */ @SuppressWarnings("unchecked") @@ -177,17 +184,17 @@ addPathSetting(settingsPanel, MODE_PATH_WORKING); //Settings - + JButton jbDefaults = new JButton("Set Defaults"); jbDefaults.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - setDefaults(); + setDefaults(false); } - + }); - settingsPanel.add(createTitleBox(" Settings ", jbDefaults)); + settingsPanel.add(createTitleBox(" Settings ", jbDefaults)); jCheckAtomNum = new JCheckBox("Show Atom Numbers");//.setAlignmentX(0.5f); jCheckAtomNum.addActionListener(new ActionListener() { @Override @@ -200,7 +207,7 @@ jCheckAtomNum.setSelected(true); Box settingsBox = createBorderBox(true); settingsBox.add(jCheckAtomNum); - + jCheckSelHalo = new JCheckBox("Show selection halos on atoms"); jCheckSelHalo.addActionListener(new ActionListener() { @Override @@ -211,8 +218,7 @@ jCheckSelHalo.doClick(); settingsBox.add(jCheckSelHalo); - jCheckWireMesh = new JCheckBox( - "Use wire mesh for orbital display"); + jCheckWireMesh = new JCheckBox("Use wire mesh for orbital display"); settingsBox.add(jCheckWireMesh); Color[] colors = { Color.red, Color.orange, Color.yellow, Color.green, @@ -280,23 +286,14 @@ }); if (useWireMesh) jCheckWireMesh.setSelected(true); - + jCheckNboView = new JCheckBox("Emulate NBO View"); + jCheckNboView.setSelected(true); settingsBox.add(jCheckNboView); jCheckNboView.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (((JCheckBox) e.getSource()).isSelected()) { - setNBOColorScheme(); - colorBox1.setSelectedItem(Color.cyan); - colorBox2.setSelectedItem(Color.yellow); - if (jCheckWireMesh.isSelected()) - jCheckWireMesh.doClick(); - opacity.setValue(3); - } else { - setDefaults(); - runScriptNow("background black;set defaultcolors Jmol;refresh;"); - } + setDefaults(!((JCheckBox) e.getSource()).isSelected()); } }); jCheckDebugVerbose = new JCheckBox("Verbose Debugging"); @@ -307,7 +304,7 @@ debugVerbose = ((JCheckBox) e.getSource()).isSelected(); } }); - if ("nboView".equals(viewOpts)) { + if (!"nboView".equals(viewOpts)) { jCheckNboView.doClick(); } else { opacity.setValue((int) (opacityOp * 10)); @@ -317,14 +314,14 @@ return settingsPanel; } - protected void setDefaults() { - + protected void setDefaults(boolean isJmol) { + nboService.setNBOProperty("orbitalDisplayOptions", "default"); getOrbitalDisplayOptions(); opacity.setValue((int) (opacityOp * 10)); colorBox1.setSelectedItem(orbColor1); colorBox2.setSelectedItem(orbColor2); - + jCheckWireMesh.setSelected(useWireMesh); //jCheckWireMesh.doClick(); jCheckAtomNum.setSelected(true); @@ -335,6 +332,26 @@ //jCheckDebugVerbose.doClick(); jCheckNboView.setSelected(false); //jCheckNboView.doClick(); + + if (isJmol) { + runScriptNow("background gray;set defaultcolors Jmol;refresh;"); + } else { + if (jCheckWireMesh.isSelected()) + jCheckWireMesh.doClick(); + colorBox1.setSelectedItem(Color.cyan); + colorBox2.setSelectedItem(Color.yellow); + opacity.setValue(3); + try { + String atomColors = ""; + atomColors = GuiMap.getResourceString(this, + "org/gennbo/assets/atomColors.txt"); + runScriptNow(atomColors + ";refresh"); + } catch (IOException e) { + log("atomColors.txt not found", 'r'); + } + nboView = true; + } + updatePanelSettings(); } protected void setOrbitalDisplayOptions() { @@ -349,18 +366,14 @@ script += ";nbo translucent " + opacityOp + ";mo translucent " + opacityOp; runScriptNow(script); if (!nboView) - nboService.setNBOProperty("orbitalDisplayOptions", orbColor1.getRGB() + "," - + orbColor2.getRGB() + "," + opacityOp + "," + useWireMesh); + nboService.setNBOProperty("orbitalDisplayOptions", orbColor1.getRGB() + + "," + orbColor2.getRGB() + "," + opacityOp + "," + useWireMesh); } private String getOrbitalDisplayOptions() { - String options = nboService.getNBOProperty("orbitalDisplayOptions", "default"); - if (options.equals("default")) { - orbColor1 = Color.blue; - orbColor2 = Color.red; - opacityOp = 0; - useWireMesh = true; - } else if (options.equals("nboView")) { + String options = nboService.getNBOProperty("orbitalDisplayOptions", + "default"); + if (options.equals("default") || options.equals("nboView")) { orbColor1 = Color.cyan; orbColor2 = Color.yellow; opacityOp = 0.3f; @@ -397,7 +410,7 @@ public void actionPerformed(ActionEvent e) { setNBOPath(tfPath, mode); } - + }); panel.add(createTitleBox(title, null)); Box serverBox = createBorderBox(true); @@ -490,7 +503,6 @@ } } - /** * Creates the title blocks with background color for headers. * @@ -535,20 +547,6 @@ return box; } - /** - * Sets color scheme to emulate look of NBO view - */ - protected void setNBOColorScheme() { - try { - String atomColors = ""; - atomColors = GuiMap.getResourceString(this, "org/gennbo/assets/atomColors.txt"); - runScriptNow(atomColors + ";refresh"); - nboView = true; - } catch (IOException e) { - alertError("Atom colors not found"); - } - } - // /** // * sets components visible recursively // * @param c @@ -563,10 +561,10 @@ // } // } - /** * label atoms: (number lone pairs)+atomnum - * @param alpha + * + * @param alpha */ protected void showAtomNums(boolean alpha) { if (!showAtNum) { @@ -685,10 +683,9 @@ } private boolean dontLog(String line, char chFormat) { - return (jpNBOLog == null - || line.trim().equals("") - || line.indexOf("read/unit=5/attempt to read past end") >= 0 - || !debugVerbose && "b|r".indexOf("" + chFormat) < 0); + return (jpNBOLog == null || line.trim().equals("") + || line.indexOf("read/unit=5/attempt to read past end") >= 0 || !debugVerbose + && "b|r".indexOf("" + chFormat) < 0); } protected void alertError(String line) { Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -189,8 +189,7 @@ addFocusListeners(jComboUse, jrFileIn); inputBox.add(p2); - inputFileHandler = new NBOFileHandler("", "", NBOFileHandler.MODE_MODEL_USE, INPUT_FILE_EXTENSIONS, - (NBODialog) this) { + inputFileHandler = new NBOFileHandler("", "", NBOFileHandler.MODE_MODEL_USE, INPUT_FILE_EXTENSIONS, (NBODialog) this) { @Override protected boolean browsePressed() { Modified: trunk/Jmol/src/org/gennbo/NBODialogRun.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -111,12 +111,11 @@ //INPUT///////////////////////// if (inputFileHandler == null) { - inputFileHandler = new NBOFileHandler("", "47", NBOFileHandler.MODE_RUN, - "47", (NBODialog) this); + inputFileHandler = newNBOFileHandler("", "47", NBOFileHandler.MODE_RUN, + "47"); } else { - inputFileHandler = new NBOFileHandler(inputFileHandler.jobStem, - inputFileHandler.tfExt.getText(), NBOFileHandler.MODE_RUN, "47", - (NBODialog) this); + inputFileHandler = newNBOFileHandler(inputFileHandler.jobStem, + inputFileHandler.tfExt.getText(), NBOFileHandler.MODE_RUN, "47"); } inputFileHandler.setBrowseEnabled(false); @@ -169,11 +168,11 @@ box.add(rbLocal); bg.add(rbLocal); JRadioButton btn = new JRadioButton("NBOrXiv"); - final JDialog d = this; + final NBODialogRun d = this; btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - ArchiveViewer aView = new ArchiveViewer((NBODialog) d, ARCHIVE_DIR); + ArchiveViewer aView = new ArchiveViewer(d, ARCHIVE_DIR); aView.setVisible(true); } }); @@ -687,7 +686,7 @@ private JTextField tfPath; private String baseDir; - public ArchiveViewer(NBODialog d, String url) { + public ArchiveViewer(NBODialogRun d, String url) { super(d, "NBO Archive Files"); GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice(); Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -217,66 +217,68 @@ " DIz : dipole moment operator (z component)"}; - protected JPanel buildSearchPanel(){ + protected JPanel buildSearchPanel() { JPanel p = new JPanel(); keyProp = ""; keywordNumber = 0; p.setLayout(new BorderLayout()); /////INPUT FILE///////////// - Box box1 = createTitleBox(" Select Job ", new HelpBtn("search_job_help.htm")); + Box box1 = createTitleBox(" Select Job ", + new HelpBtn("search_job_help.htm")); Box box = Box.createHorizontalBox(); box.setAlignmentX(0.0f); - if(inputFileHandler == null) - inputFileHandler = new NBOFileHandler("","47",4,"47",(NBODialog)this); + if (inputFileHandler == null) + inputFileHandler = newNBOFileHandler("", "47", 4, "47"); else - inputFileHandler = new NBOFileHandler(inputFileHandler.jobStem,"47",4,"47",(NBODialog)this); box.add(inputFileHandler); + inputFileHandler = newNBOFileHandler(inputFileHandler.jobStem, "47", 4, "47"); + box.add(inputFileHandler); box.setBorder(BorderFactory.createLineBorder(Color.black)); inputFileHandler.tfName.setText(""); - + box1.add(box); - p.add(box1,BorderLayout.NORTH); + p.add(box1, BorderLayout.NORTH); /////ALPHA-BETA SPIN///////////////// betaSpin = new JRadioButton("<html>β</html>"); alphaSpin = new JRadioButton("<html>α</html>"); - ActionListener spinListener = new ActionListener(){ + ActionListener spinListener = new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { - if(alphaSpin.isSelected()){ + if (alphaSpin.isSelected()) { setBonds(true); showAtomNums(true); - }else{ + } else { setBonds(false); showAtomNums(false); } - switch(keywordNumber){ + switch (keywordNumber) { case KEYWD_NBO: case KEYWD_BEND: case KEYWD_DIPOLE: list1.removeAllElements(); - getListSearch("o",list1); + getListSearch("o", list1); break; case KEYWD_E2PERT: list1.removeAllElements(); - getListSearch("d",list1); + getListSearch("d", list1); list2.removeAllElements(); - getListSearch("a nbo",list2); + getListSearch("a nbo", list2); break; case KEYWD_NLMO: list2.removeAllElements(); - getListSearch("o",list2); - break; + getListSearch("o", list2); + break; case KEYWD_STERIC: list1.removeAllElements(); - getListSearch("d",list1); + getListSearch("d", list1); list2.removeAllElements(); - getListSearch("d'",list2); - break; + getListSearch("d'", list2); + break; case KEYWD_CMO: list1.removeAllElements(); - getListSearch("n",list1); + getListSearch("n", list1); + } } - } }; alphaSpin.addActionListener(spinListener); betaSpin.addActionListener(spinListener); @@ -288,71 +290,71 @@ bg = new ButtonGroup(); moRb = new JRadioButton("MO"); moRb.setSelected(true); - moRb.addActionListener(new ActionListener(){ + moRb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { runScriptQueued("nbo delete;"); - if(!useWireMesh) + if (!useWireMesh) runScriptQueued("nbo nomesh fill translucent " + opacityOp); runScriptQueued("nbo type mo"); runScriptQueued("nbo color " + color2 + " " + color1); - showOrbJmol("MO",orb2.getSelectedIndex() + 1); + showOrbJmol("MO", orb2.getSelectedIndex() + 1); } }); moRb.setBackground(null); nboRb = new JRadioButton("NBO"); - nboRb.addActionListener(new ActionListener(){ + nboRb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { runScriptQueued("nbo type pnbo"); - showOrbJmol("NBO",orb.getSelectedIndex() + 1); + showOrbJmol("NBO", orb.getSelectedIndex() + 1); } }); nboRb.setBackground(null); bg.add(moRb); bg.add(nboRb); /////SELECT KEYWORD/////////// - box=Box.createVerticalBox(); + box = Box.createVerticalBox(); opList = new JPanel(); opBas = new JComboBox<String>(op); - opBas.setUI(new StyledComboBoxUI(150,350)); + opBas.setUI(new StyledComboBoxUI(150, 350)); back = new JButton("<html>←Back</html>"); - - opBas.setMaximumSize(new Dimension(350,30)); + + opBas.setMaximumSize(new Dimension(350, 30)); opBas.setAlignmentX(0.0f); - + opBas.addActionListener(new ActionListener() { @Override - public void actionPerformed(ActionEvent e) { + public void actionPerformed(ActionEvent e) { String s = opBas.getSelectedItem().toString(); operator = opBas.getSelectedIndex(); changeKey(opBas(s.trim().split(" ")[0])); } }); opBas.setVisible(false); - + box.add(opBas); box.add(opList); box.setBorder(BorderFactory.createLineBorder(Color.black)); - optionBox=Box.createVerticalBox(); + optionBox = Box.createVerticalBox(); optionBox.setVisible(false); Box topBox = Box.createHorizontalBox(); keyWdBtn = new JButton("<html></html>"); - + keyWdBtn.setVisible(false); keyWdBtn.setRolloverEnabled(false); topBox.add(keyWdBtn); topBox.add(back); - topBox.add(new HelpBtn("a"){ + topBox.add(new HelpBtn("a") { @Override - public void actionPerformed(ActionEvent e){ + public void actionPerformed(ActionEvent e) { String url = "http://nbo6.chem.wisc.edu/jmol_help/"; - if(keywordNumber == 0){ + if (keywordNumber == 0) { url += "search_help.htm"; - }else if(keyProp.equals("E2")){ + } else if (keyProp.equals("E2")) { url += "search_e2pert_help.htm"; - }else{ - url += "search_" + keyProp +"_help.htm"; + } else { + url += "search_" + keyProp + "_help.htm"; } try { Desktop.getDesktop().browse(new URI(url)); @@ -364,16 +366,16 @@ } }); Box box2 = createTitleBox(" Select Keyword ", topBox); - back.addActionListener(new ActionListener(){ + back.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { - if(keywordNumber == KEYWD_NRT && list3.getSize() > 0) + if (keywordNumber == KEYWD_NRT && list3.getSize() > 0) unit.setSelectedIndex(0); - if(relabel){ + if (relabel) { runScriptQueued("select add {*}.bonds; color bonds lightgrey; select remove {*}"); - + showAtomNums(alphaSpin.isSelected()); - for(int i = 0; i < nBonds; i++){ + for (int i = 0; i < nBonds; i++) { runScriptQueued("MEASUREMENT ID '" + i + "' off "); } } @@ -381,7 +383,7 @@ buildHome(); } }); - + back.setForeground(Color.blue); back.setEnabled(false); buildHome(); @@ -393,17 +395,17 @@ p.add(optionBox); basis = new JComboBox<String>(NBODialogView.basSet); - basis.setUI(new StyledComboBoxUI(180,-1)); - + basis.setUI(new StyledComboBoxUI(180, -1)); + inputFileHandler.setBrowseEnabled(true); viewSettingsBox.removeAll(); String file = vwr.getProperty("String", "filename", null).toString(); String ext = NBOFileHandler.getExt(new File(file)); - - if(PT.isOneOf(ext, NBOFileHandler.EXTENSIONS)) + + if (PT.isOneOf(ext, NBOFileHandler.EXTENSIONS)) notifyLoad_s(); - + return p; } Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -33,7 +33,6 @@ import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; @@ -51,7 +50,6 @@ import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; -import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JComboBox; @@ -63,13 +61,13 @@ import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextField; -import javax.swing.ListModel; -import javax.swing.ScrollPaneConstants; +import javax.swing.ListCellRenderer; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import org.jmol.util.BSUtil; +import org.jmol.awt.AwtColor; import org.jmol.java.BS; +import org.jmol.util.C; abstract class NBODialogView extends NBODialogRun { @@ -115,7 +113,6 @@ protected String currOrb = ""; private char currSign = '+'; private char lastSign = '+'; - private int iLast = 0; //NBOServe view settings private String[] plVal, vecVal, lineVal; @@ -263,8 +260,7 @@ inputBox.setPreferredSize(new Dimension(355, 40)); inputBox.setMaximumSize(new Dimension(355, 40)); topBox.add(inputBox); - inputFileHandler = new NBOFileHandler("", "47", NBOFileHandler.MODE_VIEW, - "47", (NBODialog) this); + inputFileHandler = newNBOFileHandler("", "47", NBOFileHandler.MODE_VIEW, "47"); inputBox.add(inputFileHandler); inputBox.setMaximumSize(new Dimension(350, 75)); return topBox; @@ -287,7 +283,7 @@ if (alphaList != null) alphaList = betaList = null; - basisSel(); + setNewBasis(); } }); @@ -313,7 +309,7 @@ if (nboView) { runScriptNow("select *;color bonds lightgrey"); } - basisSel(); + setNewBasis(); } }); @@ -333,7 +329,7 @@ if (nboView) { runScriptNow("select*;color bonds lightgrey"); } - basisSel(); + setNewBasis(); } }); @@ -361,7 +357,7 @@ orbPanel.setAlignmentX(0.0f); orbPanel.add(new JLabel( - " (ctrl+click to select up to 9; alt+click to change phase)"), + "click to turn up to 9 orbitals on/off; dbl-click to reverse phase"), BorderLayout.SOUTH); // orbitals.addListSelectionListener(new ListSelectionListener() { @@ -607,7 +603,7 @@ // } // - protected void basisSel() { + protected void setNewBasis() { if (orbitals == null) return; // old @@ -626,10 +622,6 @@ //orbitals.removeListSelectionListener(orbitals); //orbitals.setLayoutOrientation(JList.VERTICAL); - runScriptNow("isosurface delete"); - orbitals.clearOrbs(); - - iLast = orbitals.getSelectedIndex(); if (basis.getSelectedIndex() == BASIS_MO) { nboKeywords = cleanNBOKeylist(inputFileHandler.read47File()[1]); if (!nboKeywords.contains("CMO")) { @@ -666,7 +658,7 @@ boolean isBeta = isOpenShell && !alphaSpin.isSelected(); DefaultListModel<String> list = (isBeta ? betaList : alphaList); if (list != null) { - orbitals.setModel(list); + orbitals.setModelList(list, false); return; } list = new DefaultListModel<String>(); @@ -680,12 +672,6 @@ NBOFileHandler.pathWithoutExtension(getJmolFilename())), false); } - protected void setLastOrbitalSelection() { - if (iLast < 0) - iLast = 0; - orbitals.setSelectedIndex(iLast); - } - private String getPlaneParams() { SB s = new SB(); //Plane definitions included every time @@ -1486,8 +1472,7 @@ protected void resetView() { isNewModel = true; - iLast = 0; - // selectedOrbs = ""; + orbitals.clearOrbitals(true); } private void resetValues() { @@ -1516,8 +1501,6 @@ protected void notifyList_v(AbstractListModel<String> list) { if (list != null) { - if (iLast < 0) - iLast = 0; orbitals.setLayoutOrientation(JList.VERTICAL_WRAP); //orbitals.setSelectedIndex(orbitals.model.size()-1); @@ -1564,15 +1547,6 @@ type = type.substring(1); boolean isBeta = isOpenShell && !alphaSpin.isSelected(); try { - String[] a = ((Map<String, String[]>) moData.get("nboLabelMap")) - .get((isBeta ? "beta_" : "") + type); - - DefaultListModel<String> list = (isBeta ? betaList : alphaList); - for (int i = 0; i < a.length; i++) - list.addElement((i + 1) + ". " + a[i] + " "); - orbitals.setModel(list); - setLastOrbitalSelection(); - alphaSpin.setVisible(isOpenShell); // old betaSpin.setVisible(isOpenShell); // old @@ -1587,7 +1561,19 @@ planeBox.add(planeFields[1]); planeBox.add(planeFields[2]); viewSettingsBox.setVisible(true); - orbitals.requestFocus(); + + // set list + + String[] a = ((Map<String, String[]>) moData.get("nboLabelMap")) + .get((isBeta ? "beta_" : "") + type); + + DefaultListModel<String> list = (isBeta ? betaList : alphaList); + for (int i = 0; i < a.length; i++) + list.addElement((i + 1) + ". " + a[i] + " "); + orbitals.setModelList(list, true); + //orbitals.requestFocus(); + + //atomOrient.doClick(); getChooseList(); @@ -1599,6 +1585,7 @@ } catch (NullPointerException e) { log(e.getMessage() + " reading file", 'r'); } + } protected void setViewerBasis() { @@ -1689,125 +1676,222 @@ // //// end old - - private String visibleOrbs; - //private boolean altPressed; - private InputEvent event; - int[] lastSelection; private BS bsOn = new BS(); private BS bsNeg = new BS(); private BS bsKnown = new BS(); + private Color contrastColor; - public OrbitalList() { super(); setLayoutOrientation(JList.VERTICAL_WRAP); setVisibleRowCount(12); - setBackground(Color.WHITE); - setFont(new Font("MONOSPACED", Font.PLAIN, 14)); + setFont(nboFont); + setColorScheme(); + //setFont(new Font("MONOSPACED", Font.PLAIN, 14)); setModel(new DefaultListModel<String>()); - visibleOrbs = ""; + setCellRenderer(new ListCellRenderer<String>(){ + + + @Override + public Component getListCellRendererComponent(JList<? extends String> list, + String value, int index, + boolean isSelected, + boolean cellHasFocus) { + return renderCell(index); + } + }); addListSelectionListener(this); addMouseListener(this); } - protected void clearOrbs() { - visibleOrbs = ""; + public void setModelList(DefaultListModel<String> list, boolean isNew) { + setModel(list); + setColorScheme(); + if (isNew) { + orbitals.clearOrbitals(false); + orbitals.setLastOrbitalSelection(); + } + for (int i = list.getSize(); --i >= 0;) + setLabel(i); } - @Override - public void valueChanged(ListSelectionEvent e) { - if (e.getValueIsAdjusting() || getModel().getSize() == 0) { - return; + private void setColorScheme() { + int bgcolor = vwr.getBackgroundArgb(); + int color = C.getArgb(C.getBgContrast(bgcolor)); + setBackground(new AwtColor(bgcolor)); + contrastColor = new AwtColor(color);// Black or White + } + + private JLabel cellLabel; + + protected Component renderCell(int index) { + if (cellLabel == null) { + cellLabel = new JLabel(); } - boolean toggle = (event != null && event.isAltDown()); + cellLabel.setText(getModel().getElementAt(index)); + cellLabel.setForeground(!bsOn.get(index) ? contrastColor : bsNeg.get(index) ? orbColor2 : orbColor1); + + return cellLabel; + } + + /** + * Clear the orbital display bitsets. + * + * @param isNewFile + */ + protected void clearOrbitals(boolean isNewFile) { + bsKnown.clearAll(); + if (isNewFile) { + bsOn.clearAll(); + bsNeg.clearAll(); + } + } + + public void setLastOrbitalSelection() { + updateIsosurfacesInJmol(-1, false); + } + + private void updateIsosurfacesInJmol(int iClicked, boolean fromModel) { DefaultListModel<String> model = (DefaultListModel<String>) getModel(); - String script = "select all"; - String beta = (betaSpin.isSelected() ? " beta" : ""); + boolean isBeta = betaSpin.isSelected(); String type = basis.getSelectedItem().toString(); - - // get only the ones needing changing - BS bsSel = new BS(); - int[] selected = getSelectedIndices(); - for (int i = selected.length; --i >= 0;) - bsSel.set(selected[i]); - BS bsNew = BSUtil.copy(bsSel); - if (!toggle) - bsNew.andNot(bsOn); - - // generate the new isosurfaces - for (int i = bsNew.nextSetBit(0); i >= 0; i = bsNew.nextSetBit(i + 1)) { - if (toggle) { - String label = model.get(i).trim(); - String label0 = (bsNeg.get(i) ? label.substring(0, label.length() - 3) - : label); - bsNeg.setBitTo(i, !bsNeg.get(i)); - model.set(i, label0 + (bsNeg.get(i) ? "[-]" : " ")); - bsKnown.clear(i); + String script = "select all;"; + if (fromModel) + script += updateBitSetFromModel(); + else + updateModelFromBitSet(); + + for (int i = model.getSize(); --i >= 0;) { + boolean isOn = bsOn.get(i); + if (i == iClicked || isSelectedIndex(i) != isOn) { + String id = "mo" + i; + bsOn.setBitTo(i, !isOn); + boolean isKnown = bsKnown.get(i); + if (isKnown && !bsOn.get(i)) { + // just turn it off + script += "isosurface mo" + i + " off;"; + } else if (isKnown){ + // just turn it on + script += "isosurface mo" + i + " on;"; + } else { + bsKnown.set(i); + // create the isosurface + script += "isosurface " + id + + " color " + (bsNeg.get(i) ? color1 + " " + color2 : color2 + " " + color1) + + " cutoff 0.0316 NBO " + type + " " + (i + 1) + (isBeta ? " beta" : "") + + " frontonly " + + (useWireMesh ? " mesh nofill" : " nomesh fill translucent " + opacityOp) + ";"; + } } - // we can - String id = "mo" + i; - script += ";select *;if (" + bsKnown.get(i) + "){isosurface " + id + " on} else {isosurface " + id - + " color " + (bsNeg.get(i) ? color1 + " " + color2 : color2 + " " + color1) - + " cutoff 0.0316 NBO " + type + " " + (i + 1) + beta + " frontonly " - + (useWireMesh ? " mesh nofill" : " nomesh fill translucent " + opacityOp) + "}"; } + updateModelFromBitSet(); + runScriptQueued(script); +// System.out.println("known" + bsKnown + " on" + bsOn + " neg" + bsNeg + " " + script); + } - // remove unselected orbitals and update bsOn - BS bsOff = BSUtil.copy(bsOn); - bsOff.andNot(bsSel); - for (int i = bsOff.nextSetBit(0); i >= 0; i = bsOff.nextSetBit(i + 1)) { - script += ";isosurface mo" + i + " off"; + private String updateBitSetFromModel() { + int[] a = getSelectedIndices(); + BS bsModel = new BS(); + for (int i = a.length; --i >= 0;) + bsModel.set(i); + String script = ""; + for (int i = getModel().getSize(); --i >= 0;) { + if (bsModel.get(i) != bsOn.get(i)) { + if (bsOn.get(i)) { + script += "isosurface mo" + i + " off;"; + bsOn.clear(i); + } else { + bsOn.set(i); + } + } } - script += ";select none"; - script += ";print 'n" + bsOn + " s" + bsSel + " n" + bsNew + " o" + bsOff + " -" + bsNeg + "'"; - // now run the script - runScriptQueued(script); - - bsOn.clearAll(); - bsOn.or(bsSel); - bsKnown.or(bsOn); + return script; } - + + private void updateModelFromBitSet() { + int[] a = new int[bsOn.cardinality()]; + for (int i = bsOn.nextSetBit(0), pt = 0; i >= 0; i = bsOn.nextSetBit(i + 1)) + a[pt++] = i; + setSelectedIndices(a); + } @Override - public void mouseClicked(MouseEvent e) { - event = null; - System.out.println("CLICK" + e); + public void valueChanged(ListSelectionEvent e) { } + private void toggleOrbitalNegation(int i) { + bsNeg.setBitTo(i, !bsNeg.get(i)); + bsKnown.clear(i); // to - just switch colors? + setLabel(i); + } + + protected void setLabel(int i) { + String label0 = getModel().getElementAt(i); + int pt = label0.indexOf('['); + if (pt > 0) + label0 = label0.substring(0, pt); + ((DefaultListModel<String>) getModel()).set(i, label0.trim() + + (bsNeg.get(i) ? "[-] " : " ")); + } + @Override public void mousePressed(MouseEvent e) { - event = e; - System.out.println("PRESS" + e); +// System.out.println("PRESS" + e); +// System.out.println("press " + PT.toJSON(null, getSelectedIndices()) + e.getClickCount()); } + @Override public void mouseReleased(MouseEvent e) { - event = null; - System.out.println("RELEASE" + e); +// System.out.println("RELEASE" + e); +// System.out.println("release " + PT.toJSON(null, getSelectedIndices())); } + private long lastTime = 0; + private int lastPicked = 999; + private final static long DBLCLICK_THRESHOLD_MS = 300; + @Override + public void mouseClicked(MouseEvent e) { +// System.out.println("click " + PT.toJSON(null, getSelectedIndices()) +// + e.getClickCount()); + + int i = getSelectedIndex(); + + System.out.println("NBODialogView: picked " + lastPicked + "/" + i + " ms=" + (System.currentTimeMillis() - lastTime)); + if (e.getClickCount() > 1 || lastPicked == i && System.currentTimeMillis() - lastTime < DBLCLICK_THRESHOLD_MS) { + toggleOrbitalNegation(i); + bsOn.set(i); + updateIsosurfacesInJmol(i, false); + } + updateIsosurfacesInJmol(i, false); + lastTime = System.currentTimeMillis(); + lastPicked = i; + } + + @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { - event = null; } @Override public void keyPressed(KeyEvent e) { - System.out.println("KEYDN" + orbitals.getSelectedIndex() + " " + e); +// System.out.println("KEYDN" + orbitals.getSelectedIndex() + " " + e); } + @Override public void keyReleased(KeyEvent e) { - System.out.println("KEYUP" + orbitals.getSelectedIndex() + " " + e); +// System.out.println("KEYUP" + orbitals.getSelectedIndex() + " " + e); + updateIsosurfacesInJmol(-1, true); } + @Override public void keyTyped(KeyEvent e) { } } + } Modified: trunk/Jmol/src/org/jmol/jvxl/data/JvxlData.java =================================================================== --- trunk/Jmol/src/org/jmol/jvxl/data/JvxlData.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/jmol/jvxl/data/JvxlData.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -111,6 +111,7 @@ public int colorFractionBase = JvxlCoder.defaultColorFractionBase; public int colorFractionRange = JvxlCoder.defaultColorFractionRange; + public boolean isValid = true; // set false if calculation gave no surface public boolean insideOut; public boolean isXLowToHigh; public boolean isContoured; @@ -176,6 +177,7 @@ public P3 mapLattice; public P3 fixedLattice; public String baseColor; + public float integration = Float.NaN; public void clear() { allowVolumeRender = true; @@ -191,7 +193,9 @@ contourValuesUsed = null; contourColixes = null; contourColors = null; + integration = Float.NaN; isSlabbable = false; + isValid = true; mapLattice = null; meshColor = null; msg = ""; Modified: trunk/Jmol/src/org/jmol/jvxl/readers/IsoMOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/jvxl/readers/IsoMOReader.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/jmol/jvxl/readers/IsoMOReader.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -348,6 +348,7 @@ if (!setupCalculation()) return; q.createCube(); + jvxlData.integration = q.getIntegration(); } } Modified: trunk/Jmol/src/org/jmol/jvxl/readers/SurfaceReader.java =================================================================== --- trunk/Jmol/src/org/jmol/jvxl/readers/SurfaceReader.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/jmol/jvxl/readers/SurfaceReader.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -401,9 +401,14 @@ } if (params.contactPair == null) setBBoxAll(); - if (!params.isSilent) - Logger.info("boundbox corners " + Escape.eP(xyzMin) + " " + jvxlData.isValid = (xyzMin.x != Float.MAX_VALUE); + if (!params.isSilent) { + if (!jvxlData.isValid) + Logger.error("no isosurface points were found!"); + else + Logger.info("boundbox corners " + Escape.eP(xyzMin) + " " + Escape.eP(xyzMax)); + } jvxlData.boundingBox = new P3[] { xyzMin, xyzMax }; jvxlData.dataMin = dataMin; jvxlData.dataMax = dataMax; Modified: trunk/Jmol/src/org/jmol/quantum/MOCalculation.java =================================================================== --- trunk/Jmol/src/org/jmol/quantum/MOCalculation.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/jmol/quantum/MOCalculation.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -158,7 +158,7 @@ volumeData.getVolumetricVectorLengths(), bsSelected, xyz, atoms, points, false); doDebug = (Logger.debugging); - return (slaters != null || checkCalculationType()); + return !bsSelected.isEmpty() && (slaters != null || checkCalculationType()); } @Override @@ -1212,13 +1212,12 @@ - float integration = 0; - private boolean isSquaredLinear; public void calculateElectronDensity() { if (points != null) return; + integration = 0; for (int ix = nX; --ix >= 0;) for (int iy = nY; --iy >= 0;) for (int iz = nZ; --iz >= 0;) { Modified: trunk/Jmol/src/org/jmol/quantum/QuantumCalculation.java =================================================================== --- trunk/Jmol/src/org/jmol/quantum/QuantumCalculation.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/jmol/quantum/QuantumCalculation.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -38,6 +38,13 @@ protected boolean doDebug = false; protected BS bsExcluded; + protected float integration = Float.NaN; + + public float getIntegration() { + return integration; + } + + protected final static float bohr_per_angstrom = 1 / 0.52918f; protected float[][][] voxelData; @@ -235,5 +242,5 @@ } public abstract void createCube(); - + } Modified: trunk/Jmol/src/org/jmol/scriptext/CmdExt.java =================================================================== --- trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -5189,7 +5189,7 @@ if (n == null || n.intValue() == 0) setShapeProperty(iShape, "init", Integer.valueOf(modelIndex)); setShapeProperty(iShape, "moData", moData); - return (String) getShapePropertyIndex(iShape, "showMO", ptMO); + return (String) e.sm.getShapePropertyIndex(iShape, "showMO", ptMO); } private String getScriptID(ScriptContext context) { @@ -5201,11 +5201,6 @@ + (context == null ? "" : " context " + context.id) + ")\n"; } - private Object getShapePropertyIndex(int shapeType, String propertyName, - int index) { - return e.sm.getShapePropertyIndex(shapeType, propertyName, index); - } - private T tokenAt(int i, T[] args) { return (i < args.length ? args[i] : null); } Modified: trunk/Jmol/src/org/jmol/scriptext/IsoExt.java =================================================================== --- trunk/Jmol/src/org/jmol/scriptext/IsoExt.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/jmol/scriptext/IsoExt.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -1001,15 +1001,21 @@ eval.setCursorWait(true); setMoData(propertyList, moNumber, linearCombination, offset, isNegOffset, iModel, title, nboType, isBeta); - if (haveMO) + if (haveMO) { addShapeProperty(propertyList, "finalize", null); + } } if (!ignoreSquared) { - setShapeProperty(iShape, "squareLinear", linearSquared); - setShapeProperty(iShape, "squareData", squared); + setShapeProperty(iShape, "squareLinear", linearSquared); + setShapeProperty(iShape, "squareData", squared); } if (propertyList.size() > 0) setShapeProperty(iShape, "setProperties", propertyList); + if (haveMO && !eval.tQuiet) { + showString(T.nameOf(tokAt(0)) + " " + moNumber + " " + (isBeta ? "beta " : "") + + getShapeProperty(iShape, "message")); + } + propertyList.clear(); } } @@ -1052,9 +1058,11 @@ if (data.indexOf("alpha") >= 0) { if (isBeta) { if (data.indexOf("beta") >= 0) - data = data.substring(data.indexOf("beta") + 4); + data = data.substring(data.indexOf("beta") + 10); // "beta spin" else data = ""; + } else { + data = data.substring(data.indexOf("alpha") + 10); // "alpha spin" } } int len = data.length(); @@ -1108,7 +1116,8 @@ @SuppressWarnings("unchecked") private void setMoData(Lst<Object[]> propertyList, int moNumber, float[] lc, int offset, boolean isNegOffset, int modelIndex, - String title, String nboType, boolean isBeta) throws ScriptException { + String title, String nboType, boolean isBeta) + throws ScriptException { ScriptEval eval = e; if (modelIndex < 0) { modelIndex = vwr.am.cmi; @@ -1116,8 +1125,8 @@ eval.errorStr(ScriptError.ERROR_multipleModelsDisplayedNotOK, "MO isosurfaces"); } - Map<String, Object> moData = (Map<String, Object>) vwr - .ms.getInfo(modelIndex, "moData"); + Map<String, Object> moData = (Map<String, Object>) vwr.ms.getInfo( + modelIndex, "moData"); if (moData == null) error(ScriptError.ERROR_moModelError); vwr.checkMenuUpdate(); @@ -1134,7 +1143,7 @@ if (lc != null && lc.length == 1) offset = 0; else if (isBeta && moData.containsKey("firstBeta")) - offset = ((Integer) moData.get("firstBeta")).intValue(); + offset = ((Integer) moData.get("firstBeta")).intValue(); int lastMoNumber = (moData.containsKey("lastMoNumber") ? ((Integer) moData .get("lastMoNumber")).intValue() : 0); int lastMoCount = (moData.containsKey("lastMoCount") ? ((Integer) moData @@ -1151,7 +1160,8 @@ error(ScriptError.ERROR_moOnlyOne); if (offset != Integer.MAX_VALUE) { // 0: HOMO; - if (moData.containsKey("HOMO")) { + if (isBeta) { + } else if (moData.containsKey("HOMO")) { moNumber = ((Integer) moData.get("HOMO")).intValue() + offset; } else { moNumber = nOrb; @@ -1176,8 +1186,8 @@ } if (f == null) error(ScriptError.ERROR_moOccupancy); - moNumber += offset; } + moNumber += offset; if (!chk) Logger.info("MO " + moNumber); } Modified: trunk/Jmol/src/org/jmol/shapesurface/Isosurface.java =================================================================== --- trunk/Jmol/src/org/jmol/shapesurface/Isosurface.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/jmol/shapesurface/Isosurface.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -880,10 +880,17 @@ return ret; if (property == "message") { String s = ""; - if (shapeID == JC.SHAPE_ISOSURFACE) + if (!jvxlData.isValid) + return "invalid! (no atoms selected?)"; + if (!Float.isNaN(jvxlData.integration)) + s += "integration " + jvxlData.integration; + if (shapeID == JC.SHAPE_ISOSURFACE || shapeID == JC.SHAPE_MO || shapeID == JC.SHAPE_NBO) s += " with cutoff=" + jvxlData.cutoff; + if (shapeID == JC.SHAPE_MO || shapeID == JC.SHAPE_NBO) + return s; if (jvxlData.dataMin != Float.MAX_VALUE) s += " min=" + jvxlData.dataMin + " max=" + jvxlData.dataMax; + s += "; " + JC.shapeClassBases[shapeID].toLowerCase() + " count: " + getPropMC("count", index); return s + getPropI("dataRangeStr", index) + jvxlData.msg; Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-26 22:29:18 UTC (rev 21355) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-27 21:29:33 UTC (rev 21356) @@ -107,9 +107,6 @@ import org.openscience.jmol.app.surfacetool.SurfaceTool; import org.openscience.jmol.app.webexport.WebExport; -import org.gennbo.NBODialog; -import org.gennbo.NBOService; - public class JmolPanel extends JPanel implements SplashInterface, JsonNioClient { protected static HistoryFile historyFile, pluginFile; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-28 18:49:38
|
Revision: 21361 http://sourceforge.net/p/jmol/code/21361 Author: hansonr Date: 2017-01-28 18:49:35 +0000 (Sat, 28 Jan 2017) Log Message: ----------- NBO fixes Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/gennbo/NBODialogRun.java trunk/Jmol/src/org/jmol/viewer/JC.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-28 16:29:42 UTC (rev 21360) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-28 18:49:35 UTC (rev 21361) @@ -87,6 +87,15 @@ static final char DIALOG_MODEL = 'm'; static final char DIALOG_CONFIG = 'c'; + protected static final int ORIGIN_UNKNOWN = 0; + protected static final int ORIGIN_NIH = 1; + protected static final int ORIGIN_LINE_FORMULA = 2; + protected static final int ORIGIN_FILE_INPUT = 3; + protected static final int ORIGIN_NBO_ARCHIVE = 4; + + protected int modelOrigin = ORIGIN_UNKNOWN; + + private static final String DEFAULT_SCRIPT = "set bondpicking true;set multipleBondSpacing -0.5;set zoomlarge false;select none;"; protected static final String INPUT_FILE_EXTENSIONS = "adf;cfi;com;g09;gau;gms;jag;log;mm2;mnd;mol;mp;nw;orc;pqs;qc;vfi;xyz;47"; @@ -101,6 +110,13 @@ final static protected Font topFont = new Font("Arial", Font.BOLD, 20); /** + * user input box .... -- should be monospace + */ + final static protected Font userInputFont = new Font("Arial", Font.PLAIN, 12); + + + + /** * 16 pt M O N O S P A C E D */ final static protected Font monoFont = new Font("Monospaced", Font.BOLD, 16); Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-01-28 16:29:42 UTC (rev 21360) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-01-28 18:49:35 UTC (rev 21361) @@ -77,8 +77,8 @@ "Create 3-center linkage between two atoms and a ligand" }; //encodes number of atoms that can be selected - protected int editMode; - private final static int ALTER = 4, CLIP = 2, MUTATE = 1; + protected int boxCount; + private final static int BOX_COUNT_4 = 4, BOX_COUNT_2 = 2, BOX_COUNT_1 = 1; private final static int MAX_HISTORY = 5; /// private static final String LOAD_SCRIPT = ";set zoomlarge false;zoomTo 0.5 {*} 0;"; @@ -87,10 +87,10 @@ /// private String moveTo; private Box editBox; - private JTextField jtJmolInput, jtLineInput; + private JTextField jtNIHInput, jtLineFormula; private JComboBox<String> jcSymOps; protected JTextField editValueTf; - protected JButton jbEdit, jbClear; + protected JButton jbApply, jbClear; protected JComboBox<String> jComboSave; @@ -105,6 +105,10 @@ private boolean loadModel; protected String selected = ""; + + private JButton rebond; + + private JLabel atomsLabel; protected JPanel buildModelPanel() { panel = new JPanel(); @@ -137,18 +141,20 @@ final JRadioButton jrJmolIn = new JRadioButton("NIH/PubChem"); jrJmolIn.setFont(monoFont); - jrJmolIn.setSelected(true); final JRadioButton jrLineIn = new JRadioButton("Line Formula"); jrLineIn.setFont(monoFont); + jrLineIn.setSelected(true); final JRadioButton jrFileIn = new JRadioButton("File Input"); jrFileIn.setFont(monoFont); ButtonGroup rg = new ButtonGroup(); rg.add(jrJmolIn); rg.add(jrLineIn); rg.add(jrFileIn); - createInput(jtJmolInput = new JTextField(), jrJmolIn); - createInput(jtLineInput = new JTextField(), jrLineIn); - jtLineInput.add(new JLabel("line formula")); + createInput(jtNIHInput = new JTextField(), jrJmolIn); + createInput(jtLineFormula = new JTextField(), jrLineIn); + jtNIHInput.setFont(userInputFont); + jtLineFormula.setFont(userInputFont); + jtLineFormula.add(new JLabel("line formula")); String[] useOps = { "<Select File Type>", "[.xyz] XYZ", "[.mol] MOL", "[.cfi] NBO Cartesian", "[.vfi] NBO Valence", "[.47] NBO Archive", "[.gau] Gaussian Input", "[.log] Gaussian Output", @@ -175,10 +181,10 @@ } }); JPanel p2 = new JPanel(new GridLayout(3, 2)); + p2.add(jrLineIn); + p2.add(jtLineFormula); p2.add(jrJmolIn); - p2.add(jtJmolInput); - p2.add(jrLineIn); - p2.add(jtLineInput); + p2.add(jtNIHInput); p2.add(jrFileIn); p2.add(jComboUse); addFocusListeners(jComboUse, jrFileIn); @@ -249,15 +255,15 @@ Box actionBox = Box.createVerticalBox(); final String[] actions = { "Alter", "Clip", "Fuse", "Link", "Mutate", "Switch", "Twist", "Value", "3chb" }; - final JRadioButton[] btns = new JRadioButton[actions.length]; + final JRadioButton[] jrModelActions = new JRadioButton[actions.length]; ButtonGroup rg = new ButtonGroup(); for (int i = 0; i < actions.length; i++) { - btns[i] = new JRadioButton(actions[i]); - btns[i].setToolTipText(editInfo[i]); - actionBox.add(btns[i]); - rg.add(btns[i]); + jrModelActions[i] = new JRadioButton(actions[i]); + jrModelActions[i].setToolTipText(editInfo[i]); + actionBox.add(jrModelActions[i]); + rg.add(jrModelActions[i]); final int op = i; - btns[i].addActionListener(new ActionListener() { + jrModelActions[i].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { editAction = actions[op].toLowerCase(); @@ -280,7 +286,8 @@ } }); lowBox.add(sym); - JButton rebond = new JButton("Rebond"); + rebond = new JButton("Rebond"); + rebond.setEnabled(false); rebond.setToolTipText("Change bonding symmetry around transition metal"); rebond.addActionListener(new ActionListener() { @@ -294,7 +301,7 @@ rightBox.add(lowBox); editBox.add(rightBox); - btns[0].doClick(); + //btns[0].doClick(); return editBox; } @@ -306,19 +313,19 @@ editBox.setAlignmentX(0.5f); editBox.setVisible(false); Box atBox = Box.createHorizontalBox(); - atBox.add(new JLabel("Atoms: ")); + atBox.add(atomsLabel = new JLabel("")); // "Atoms:" atomNumBox = new JTextField[4]; for (int i = 0; i < 4; i++) { atomNumBox[i] = new JTextField(); - atomNumBox[i].setFont(titleFont); + atomNumBox[i].setFont(userInputFont); atomNumBox[i].setMaximumSize(new Dimension(50, 50)); atBox.add(atomNumBox[i]).setVisible(false); final int num = i; atomNumBox[i].addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent arg0) { - if (num == editMode - 1) { - jbEdit.setEnabled(true); + if (num == boxCount - 1) { + jbApply.setEnabled(true); } } @@ -333,9 +340,9 @@ if (atnum > vwr.ms.ac) { atomNumBox[num].setText(""); } - String[] tmp = new String[editMode]; + String[] tmp = new String[boxCount]; selected = ""; - for (int j = 0; j < editMode; j++) { + for (int j = 0; j < boxCount; j++) { tmp[j] = atomNumBox[j].getText(); selected += (tmp[j].length() > 0 ? tmp[j] + " " : ""); } @@ -398,13 +405,13 @@ public void insertUpdate(DocumentEvent arg0) { if (!editValueTf.getText().equals("") && !editValueTf.getText().contains("Select")) - jbEdit.setEnabled(true); + jbApply.setEnabled(true); } @Override public void removeUpdate(DocumentEvent arg0) { if (editValueTf.getText().equals("")) - jbEdit.setEnabled(false); + jbApply.setEnabled(false); } }); @@ -417,8 +424,8 @@ clearSelected(); } }); - jbEdit = new JButton("Apply"); - jbEdit.addActionListener(new ActionListener() { + jbApply = new JButton("Apply"); + jbApply.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { applyEdit(editAction); @@ -426,7 +433,7 @@ }); Box lowBox = Box.createHorizontalBox(); lowBox.add(jbClear).setVisible(false); - lowBox.add(jbEdit).setVisible(false); + lowBox.add(jbApply).setVisible(false); editBox.add(lowBox); } @@ -604,35 +611,37 @@ case 'f': case 'l': case 's': - editMode = CLIP; - setEditBox(); + boxCount = BOX_COUNT_2; + setEditBox(null); break; case '3': - editMode = CLIP; - setEditBox(); + boxCount = BOX_COUNT_2; + setEditBox(null); break; case 'm': - editMode = MUTATE; - setEditBox(); + boxCount = BOX_COUNT_1; + setEditBox("Radical name or line formula..."); break; case 'a': case 't': case 'v': - editMode = ALTER; - setEditBox(); + boxCount = BOX_COUNT_4; + setEditBox(null); break; case 'r': - editMode = MUTATE; - setEditBox(); + boxCount = BOX_COUNT_1; + setEditBox(null); } } - protected void setEditBox() { - jbEdit.setEnabled(false); + protected void setEditBox(String label) { + if (label == null) + label = "Select atom" + (boxCount > 1 ? "s" : "") + "..."; + jbApply.setEnabled(false); for (int i = 0; i < 4; i++) - atomNumBox[i].setVisible(i < editMode); - - editValueTf.setText("Select atoms..."); + atomNumBox[i].setVisible(i < boxCount); + atomsLabel.setText(boxCount == 0 ? "" : "Atom" + (boxCount > 1 ? "s" : "") + ":"); + editValueTf.setText(label); editValueTf.setEnabled(false); jcSymOps.getParent().setVisible(editAction.charAt(0) == 'r'); switch (editAction.charAt(0)) { @@ -646,10 +655,10 @@ editValueTf.setVisible(false); } - currVal.setVisible(editMode == ALTER); + currVal.setVisible(boxCount == BOX_COUNT_4); valLab.setVisible(editAction.equals("alter")); - jbEdit.setVisible(!editAction.equals("value")); + jbApply.setVisible(!editAction.equals("value")); jbClear.setVisible(!editAction.equals("value")); editBox.repaint(); editBox.revalidate(); @@ -685,7 +694,7 @@ }; protected void clearSelected() { - for (int i = 0; i < editMode; i++) + for (int i = 0; i < boxCount; i++) atomNumBox[i].setText(""); if (currVal != null) currVal.setText(""); @@ -696,7 +705,7 @@ if (editValueTf != null) { editValueTf.setText("Select atoms..."); editValueTf.setEnabled(false); - jbEdit.setEnabled(false); + jbApply.setEnabled(false); } } @@ -711,7 +720,7 @@ String cmd = item + " " + selected; String val = editValueTf.getText(); if (editValueTf != null) { - if (editMode == ALTER || editMode == MUTATE) + if (boxCount == BOX_COUNT_4 || boxCount == BOX_COUNT_1) cmd += val; else if (item.equals("3chb")) { if (!val.startsWith(":")) @@ -724,7 +733,7 @@ sb.append("CMD " + cmd); log(cmd, 'i'); - jbEdit.setEnabled(false); + jbApply.setEnabled(false); nboService.rawCmdNew("m", sb, NBOService.MODE_MODEL, null, "Editing model..."); @@ -746,9 +755,10 @@ inputFileHandler.setInput(null, "", ""); saveFileHandler.setInput(null, "", ""); //clearInputFile(); - if (textBox == jtJmolInput) { + if (textBox == jtNIHInput) { + modelOrigin = ORIGIN_NIH; loadModel = true; - jtLineInput.setText(""); + jtLineFormula.setText(""); saveFileHandler.setInput(null, model, "mol"); s = "set zoomlarge false;load $" + model; if (runScriptNow(s) == null && @@ -758,9 +768,10 @@ return; } return; - } else if (textBox == jtLineInput) { + } else if (textBox == jtLineFormula) { + modelOrigin = ORIGIN_LINE_FORMULA; SB sb = new SB(); - jtJmolInput.setText(""); + jtNIHInput.setText(""); s = "show " + model; saveFileHandler.setInput(null, "line", "mol"); sb.append("CMD " + s); @@ -812,10 +823,11 @@ } String ess = getEss(ext, true); SB sb = new SB(); - if (jtJmolInput != null) { - jtJmolInput.setText(""); - jtLineInput.setText(""); + if (jtNIHInput != null) { + jtNIHInput.setText(""); + jtLineFormula.setText(""); } + modelOrigin = ORIGIN_FILE_INPUT; sb.append("GLOBAL C_PATH " + path + sep); sb.append("GLOBAL C_ESS " + ess + sep); sb.append("GLOBAL C_FNAME " + fname + sep); @@ -878,12 +890,12 @@ protected void notifyPick_m(String atomno) { - if (editMode == 0) + if (boxCount == 0) return; String[] tok = atomno.split(","); if (tok.length > 1) { //Bond selection - if (editMode == CLIP) + if (boxCount == BOX_COUNT_2) clearSelected(); String[] tok2 = tok[1].split(" "); String at1 = tok2[2].replaceAll("[\\D]", ""); @@ -896,7 +908,7 @@ } editValueTf.requestFocus(); editValueTf.setText(""); - if (editMode < 3) + if (boxCount < 3) editValueTf.setEnabled(true); boolean isSelected = (vwr.evaluateExpressionAsVariable("{*}[" + atomno + "].selected") .asFloat() == 1); @@ -913,9 +925,12 @@ } // System.out.println(atomno + " / " + selected); - int cnt = (selected.equals("") ? 1 : selected.split(" ").length); - switch (editMode) { - case ALTER: + selected = PT.rep(selected, " ", " ").trim(); + int cnt = (selected.equals("") ? 1 : PT.getTokens(selected).length); + if (selected.length() > 0) + selected += " "; + switch (boxCount) { + case BOX_COUNT_4: String desc = "atomic number"; String script = null; switch (cnt) { @@ -945,30 +960,36 @@ runScriptNow("measure off;measure " + selected); break; } - String sval; + String sval = ""; if (script == null) { script = "print measure("; - for (String x : selected.split(" ")) + String[] tokens = PT.getTokens(selected); + for (String x : tokens) script += "{*}[" + x + "] "; String s = runScriptNow(script + ")"); - String[] s2 = s.split("\\s+"); + try { + String[] s2 = PT.getTokens("" + s); if (s2.length < 2) System.out.println(script); s = s2[1]; double val = Double.parseDouble(s); val = round(val, 2); sval = "" + val; + } catch (Exception e) { + System.out.println("TESTERROR1"); + } } else { sval = "" + runScriptNow(script); } currVal.setText("current value: " + sval); - String s = editAction.equals("value") ? desc : "new " + desc; - valLab.setText(s + ":"); - log(sval, 'b'); + String s = "(" + desc + ")";//editAction.equals("value") ? desc : "new " + desc; + valLab.setText(s);// + ":"); + valLab.setVisible(true); + //log(sval, 'b'); break; - case CLIP: + case BOX_COUNT_2: if (cnt == 2) { - jbEdit.setEnabled(true); + jbApply.setEnabled(true); if (editValueTf.isVisible()) editValueTf.requestFocus(); else @@ -979,7 +1000,7 @@ cnt = 1; } break; - case MUTATE: + case BOX_COUNT_1: if (cnt == 2) { clearSelected(); selected += atomno + " "; @@ -991,7 +1012,7 @@ jcSymOps.setEnabled(true); int atomInd = Integer.parseInt(atomno) - 1; int val = vwr.ms.at[atomInd].getValence(); - jbEdit.setEnabled(true); + jbApply.setEnabled(true); switch (val) { case 4: for (String x : new String[] { "td", "c3vi", "c4v" }) @@ -1008,7 +1029,7 @@ default: jcSymOps.addItem("<Select Transition Metal>"); jcSymOps.setEnabled(false); - jbEdit.setEnabled(false); + jbApply.setEnabled(false); } } editValueTf.setEnabled(true); @@ -1018,6 +1039,8 @@ } if (cnt == 0 || isSelected) return; + if (cnt > 4) + System.out.println("OUCH1"); runScriptNow("select add {*}[" + atomno + "]"); atomNumBox[cnt - 1].setText(" " + atomno); @@ -1064,7 +1087,9 @@ for (Component c : panel.getComponents()) c.setVisible(true); editBox.setVisible(true); - + // 57 89 + ///@transitionMetal elemno>=21&elemno<=30|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112", + rebond.setEnabled(false); runScriptNow("select within(model,visible)"); String fileContents = evaluateJmolString("data({selected},'cfi')"); if (vwr.ms.ac > 0) @@ -1085,9 +1110,15 @@ redo.setEnabled(true); else redo.setEnabled(false); + String x = (String) vwr.evaluateExpression("{transitionMetal}"); + // "({1})" + rebond.setEnabled(x.length() > 4); + runScriptNow("select none; select on;refresh"); + + } - + protected void showConfirmationDialog(String st, File newFile, String ext) { int i = JOptionPane.showConfirmDialog(null, st, "Warning", JOptionPane.YES_NO_OPTION); Modified: trunk/Jmol/src/org/gennbo/NBODialogRun.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-01-28 16:29:42 UTC (rev 21360) +++ trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-01-28 18:49:35 UTC (rev 21361) @@ -724,6 +724,7 @@ logInfo("saved " + n + "file" + (n == 1 ? "" : "s"), Logger.LEVEL_INFO); if (f == null) return; + modelOrigin = ORIGIN_NBO_ARCHIVE; inputFileHandler.setInputFile(f); rbLocal.doClick(); setVisible(false); Modified: trunk/Jmol/src/org/jmol/viewer/JC.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JC.java 2017-01-28 16:29:42 UTC (rev 21360) +++ trunk/Jmol/src/org/jmol/viewer/JC.java 2017-01-28 18:49:35 UTC (rev 21361) @@ -670,9 +670,12 @@ "@alkalineEarth _Be,_Mg,_Ca,_Sr,_Ba,_Ra", "@nobleGas _He,_Ne,_Ar,_Kr,_Xe,_Rn", "@metalloid _B,_Si,_Ge,_As,_Sb,_Te", - "@transitionMetal elemno>=21&elemno<=30|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112", - "@lanthanide elemno>=57&elemno<=71", - "@actinide elemno>=89&elemno<=103", + // added La, Ac as per Frank Weinhold - these two are not f-block + "@transitionMetal elemno>=21&elemno<=30|elemno=57|elemno=89|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112", + // removed La + "@lanthanide elemno>57&elemno<=71", + // removed Ac + "@actinide elemno>89&elemno<=103", // "@hetero", handled specially Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-01-28 16:29:42 UTC (rev 21360) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-01-28 18:49:35 UTC (rev 21361) @@ -49,9 +49,12 @@ # 10. Run jmol/tools build-release.xml # - Jmol.___JmolVersion="14.8.2-beta-2017-01-28" +bug fix: La and Ac should be in trasitionmetal + +JmolVersion="14.8.2-beta-2017-01-28" + NBO options extended using the NBO VIEW or NBO OPTIONS "..." command options protected boolean jmolOptionNOZAP = false; // do no zap between modules @@ -59,9 +62,8 @@ protected boolean jmolOptionVIEW = false; // present only the VIEW option protected boolean jmolOptionNONBO = false; // do not try to contact NBOServe +JmolVersion="14.8.2-beta-2017-01-24" -Jmol.___JmolVersion="14.8.2-beta-2017-01-24" - new feature: NBO n BETA - for GenNBOReader nth beta orbital; could be expanded bug fix: NBO viewer upgrade This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-31 04:29:21
|
Revision: 21369 http://sourceforge.net/p/jmol/code/21369 Author: hansonr Date: 2017-01-31 04:29:18 +0000 (Tue, 31 Jan 2017) Log Message: ----------- NBO plug-in ready for testing. Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-01-31 02:36:40 UTC (rev 21368) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-01-31 04:29:18 UTC (rev 21369) @@ -513,14 +513,7 @@ protected void getListSearch(String get, DefaultComboBoxModel<String> list) { int mode = NBOService.MODE_LIST; - SB sb = new SB(); - sb.append("GLOBAL C_PATH " + inputFileHandler.inputFile.getParent() + sep); - sb.append("GLOBAL C_JOBSTEM " + inputFileHandler.jobStem + sep); - - if (isOpenShell)// && !get.startsWith("a")) - sb.append("GLOBAL I_SPIN " + (alphaSpin.isSelected() ? "1" : "-1") + sep); - else - sb.append("GLOBAL I_SPIN 0" + sep); + SB sb = getMetaHeader(false); String key; if (nboKeywordNumber >= KEYWD_OPBAS) { int tmpKey = nboKeywordNumber; @@ -936,17 +929,10 @@ runScriptQueued("nbo color " + color2 + " " + color1); runScriptQueued("mo color " + color2 + " " + color1); } - final SB sb = new SB(); - sb.append("GLOBAL C_PATH " + inputFileHandler.inputFile.getParent() + sep); - sb.append("GLOBAL C_JOBSTEM " + inputFileHandler.jobStem + sep); + final SB sb = getMetaHeader(false); sb.append("GLOBAL I_KEYWORD " + nboKeywordNumber + sep); - boolean isLabel = false; boolean isLabelBonds = false; - if (isOpenShell) { - sb.append("GLOBAL I_SPIN " + (alphaSpin.isSelected() ? "1" : "-1") + sep); - } else - sb.append("GLOBAL I_SPIN 0" + sep); switch (nboKeywordNumber) { case KEYWD_NPA: sb.append("GLOBAL I_ATOM_1 " + (at1.getSelectedIndex() + 1) + sep); @@ -1043,8 +1029,7 @@ for (int i = 0; i < sz; i++) { String s = list2.getElementAt(i); list2.removeElementAt(i); - s = " " + (offset + i + 1) + s.substring(s.indexOf(".")); - + s = " " + (offset + i) + s.substring(s.indexOf(".")); list2.insertElementAt(s, i); } orb2.addActionListener(l); @@ -1408,43 +1393,23 @@ return rsList; } - private int pickAtomic(String atomno, DefaultComboBoxModel<String> list) { - int ind = Integer.parseInt(atomno) - 1; - String at = vwr.ms.at[ind].getElementSymbol() + atomno + "("; - int curr = 0, size = list.getSize(); - if (currOrb.contains(at)) - curr = orbitals.getSelectedIndex(); - for (int i = curr + 1; i < size + curr; i++) { - String str = list.getElementAt(i % size).replaceAll(" ", ""); - if (str.contains(at + "lp)")) { - orbitals.setSelectedIndex(i % size); - currOrb = str; - return i % size; - } else if (str.contains(at + "ry)")) { - orbitals.setSelectedIndex(i % size); - currOrb = str; - return i % size; - } - } - return curr; - } - protected void notifyPick_s(String atomno) { + runScriptNow("isosurface delete"); String[] tok = atomno.split(","); if (tok.length < 2) { int n = PT.parseInt(atomno); if (n == Integer.MIN_VALUE) { - orb.setSelectedIndex(pickAtomic(atomno, list1)); + showOrbital(findNextAtomicOrbital(atomno, list1)); } else { switch (nboKeywordNumber) { case KEYWD_NBO: case KEYWD_BEND: case KEYWD_NLMO: case KEYWD_E2PERT: - orb.setSelectedIndex(pickAtomic(atomno, list1)); + showOrbital(findNextAtomicOrbital(atomno, list1)); return; case KEYWD_CMO: - orb2.setSelectedIndex(pickAtomic(atomno, list2)); + showOrbital(findNextAtomicOrbital(atomno, list2)); return; } int atomIndex = n - 1; @@ -1597,18 +1562,6 @@ file47Data = null; if (vwr.ms.ac == 0) return; - // if(keywordNumber == KEYWD_CMO){ - // if(vwr.ms.mc == 1) - // return; - // runScriptQueued("frame 0"); - // isNewJob = false; - // } - // if(!useWireMesh){ - // runScriptQueued("nbo nomesh fill translucent " + opacityOp); - // runScriptQueued("mo nomesh fill translucent " + opacityOp); - // } - // runScriptQueued("nbo color " + color2 + " " + color1); - // runScriptQueued("mo color " + color2 + " " + color1); runScriptNow("isosurface delete"); rbSelection = -1; @@ -1719,6 +1672,7 @@ for (int i = 0; i < lines.length; i++) { list.addElement(lines[i]); } + setSearchList(list); break; case NBOService.MODE_LIST_MO: for (int i = 0; i < lines.length; i++) Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-31 02:36:40 UTC (rev 21368) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-31 04:29:18 UTC (rev 21369) @@ -95,7 +95,6 @@ private Box vecBox; protected Box planeBox; private JRadioButton profileBtn, contourBtn, viewBtn; - // protected String vectorDef, planeDef; protected DefaultListModel<String> alphaList, betaList; @@ -241,7 +240,7 @@ } protected void goViewPressed() { - int n = orbitals.bsOn.cardinality(); + int n = orbitals.bsOn.cardinality(); if (n > 9) { vwr.alert("More than 9 orbitals are selected!"); return; @@ -266,7 +265,8 @@ inputBox.setPreferredSize(new Dimension(355, 40)); inputBox.setMaximumSize(new Dimension(355, 40)); topBox.add(inputBox); - inputFileHandler = newNBOFileHandler("", "47", NBOFileHandler.MODE_VIEW, "47"); + inputFileHandler = newNBOFileHandler("", "47", NBOFileHandler.MODE_VIEW, + "47"); inputBox.add(inputFileHandler); inputBox.setMaximumSize(new Dimension(350, 75)); return topBox; @@ -353,9 +353,10 @@ JPanel orbPanel = new JPanel(new BorderLayout()); orbPanel.setBorder(BorderFactory.createLineBorder(Color.black)); orbScroll = new JScrollPane(); - orbScroll.setMaximumSize(new Dimension(355,400)); - orbScroll.getViewport().setMinimumSize(new Dimension(250,400)); - orbScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER ); + orbScroll.setMaximumSize(new Dimension(355, 400)); + orbScroll.getViewport().setMinimumSize(new Dimension(250, 400)); + orbScroll + .setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); orbPanel.add(orbScroll, BorderLayout.CENTER); orbPanel.setAlignmentX(0.0f); @@ -368,12 +369,14 @@ /** * Check to see if we have a given plot file and that it is not zero length. - * If we don't, run gennbo (if available) using the PLOT keyword and return null. + * If we don't, run gennbo (if available) using the PLOT keyword and return + * null. * - * @param fileNum 31-39 or 0 to set to the current value of comboBasis + * @param fileNum + * 31-39 or 0 to set to the current value of comboBasis * @return a new File object or null */ - protected File ensurePlotFile(int fileNum) { + protected File ensurePlotFile(int fileNum) { if (fileNum == 0) fileNum = 31 + comboBasis.getSelectedIndex(); File f = inputFileHandler.newNBOFileForExt("" + fileNum); @@ -824,7 +827,7 @@ } //////////////////////// general methods //////////////////// - + private void newOrbitals() { if (orbitals != null) { orbitals.removeListSelectionListener(orbitals); @@ -923,7 +926,6 @@ revalidate(); } - protected void setNewBasis() { runScriptNow("isosurface delete"); @@ -961,7 +963,8 @@ alphaList = list; if (!jmolOptionNONBO) { - postNBO_v(getMetaHeader(true).append("CMD LABEL"), NBOService.MODE_LIST, list, "Getting list", null, null); + postNBO_v(getMetaHeader(true).append("CMD LABEL"), NBOService.MODE_LIST, + list, "Getting list", null, null); } loadModelFileQueued( f, @@ -970,13 +973,14 @@ } - /////////////////////// RAW NBOSERVE API //////////////////// - /** get the standard header for a set of META commands, specifically - * C_PATH and C_JOBSTEM and I_SPIN; possibly I_BAS_1 + /** + * get the standard header for a set of META commands, specifically C_PATH and + * C_JOBSTEM and I_SPIN; possibly I_BAS_1 * - * @param addBasis if desired, from comboBasis + * @param addBasis + * if desired, from comboBasis * * @return a new string buffer using javajs.util.SB * @@ -1008,7 +1012,8 @@ } /** - * add in the SIGN parameter + * add in the SIGN parameter + * * @param sb * @param i */ @@ -1018,7 +1023,6 @@ sb.append("GLOBAL SIGN +1" + sep); } - //contour/profile selected orbital in orbital list protected void createImage1or2D(boolean oneD) { @@ -1030,12 +1034,12 @@ // ? needed ? sendJmolOrientation(); SB sb = getMetaHeader(true); - + int ind = orbitals.bsOn.nextSetBit(0); - + appendOrbitalSign(sb, ind); appendLineParams(sb); - + if (oneD) { appendVectorParams(sb); } else { @@ -1046,9 +1050,9 @@ log(msg, 'I'); sb.append("CMD ").append(msg).append(sep); appendOrbitalSign(sb, ind); - - postNBO_v(sb, NBOService.MODE_IMAGE, null, - (oneD ? "Profiling.." : "Contouring.."), null, null); + + postNBO_v(sb, NBOService.MODE_IMAGE, null, (oneD ? "Profiling.." + : "Contouring.."), null, null); } private void appendLineParams(SB sb) { @@ -1059,8 +1063,6 @@ } } - - private void appendVectorParams(SB sb) { //vector definitions included every time sb.append("GLOBAL VECTOR_a " + (vectorFields[0].getText()) + sep); @@ -1093,43 +1095,45 @@ for (int i = 1; i <= 3; i++) { String tmp2 = ""; for (int j = 1; j <= 3; j++) { - Object oi = vwr.getProperty("string", - "orientationInfo.rotationMatrix[" + j + "][" + i + "]", null); + Object oi = vwr.getProperty("string", "orientationInfo.rotationMatrix[" + + j + "][" + i + "]", null); tmp2 += oi.toString() + " "; } sb.append("a V_U" + i + " " + tmp2 + sep); } - postNBO_v(new SB().append("CMD JVIEW"), NBOService.MODE_RAW, null, "Sending Jmol orientation", "jview.txt", sb.toString()); - -// sb = getMetaHeader(true); -// sb.append("CMD LABEL"); -// nboService.rawCmdNew("v", sb, NBOService.MODE_RAW, null, ""); + postNBO_v(new SB().append("CMD JVIEW"), NBOService.MODE_RAW, null, + "Sending Jmol orientation", "jview.txt", sb.toString()); + // sb = getMetaHeader(true); + // sb.append("CMD LABEL"); + // nboService.rawCmdNew("v", sb, NBOService.MODE_RAW, null, ""); + } protected void createImage1or2DMultiple(boolean oneD) { -// sb = getMetaHeader(true); -// sb.append("CMD LABEL"); -// nboService.rawCmdNew("v", sb, NBOService.MODE_RAW, null, ""); -// - + // sb = getMetaHeader(true); + // sb.append("CMD LABEL"); + // nboService.rawCmdNew("v", sb, NBOService.MODE_RAW, null, ""); + // + SB sb = new SB(); String msg = (oneD) ? "Profile" : "Contour"; String profileList = ""; - for (int pt =0, i = orbitals.bsOn.nextSetBit(0); i >= 0; i = orbitals.bsOn.nextSetBit(i + 1)) { + for (int pt = 0, i = orbitals.bsOn.nextSetBit(0); i >= 0; i = orbitals.bsOn + .nextSetBit(i + 1)) { sb = getMetaHeader(true); appendOrbitalSign(sb, i); if (oneD) - sb.append("CMD PROFILE " + (i + 1) + sep); + sb.append("CMD PROFILE " + (i + 1) + sep); else - sb.append("CMD CONTOUR " + (i + 1) + sep); + sb.append("CMD CONTOUR " + (i + 1) + sep); appendOrbitalSign(sb, i); msg += " " + (i + 1); - profileList += " " + (++pt); + profileList += " " + (++pt); postNBO_v(sb, NBOService.MODE_RAW, null, "Sending " + msg, null, null); } - log(msg, 'I'); + log(msg, 'I'); sb = getMetaHeader(false); appendLineParams(sb); sb.append("CMD DRAW" + profileList); @@ -1146,7 +1150,8 @@ appendOrbitalSign(sb, i); sb.append("CMD PROFILE " + (i + 1) + sep); appendOrbitalSign(sb, i); - postNBO_v(sb, NBOService.MODE_RAW, null, "Sending profile " + (i + 1), null, null); + postNBO_v(sb, NBOService.MODE_RAW, null, "Sending profile " + (i + 1), + null, null); tmp += " " + (i + 1); list += " " + (++pt); } @@ -1196,14 +1201,13 @@ viewPlanePt = viewPlanePt % 3; break; case VIEW_STATE_MAIN: + DefaultListModel<String> list = (betaSpin.isSelected() ? betaList : alphaList); String[] tok = atomno.split(","); if (tok.length < 2) { - //pickAtomic(atomno,alphaList,orbitals); + showOrbital(findNextAtomicOrbital(atomno, list)); return; } String[] tok2 = tok[1].split(" "); - //TODO - switch (comboBasis.getSelectedIndex()) { case BASIS_AO: case BASIS_PNAO: @@ -1212,25 +1216,45 @@ break; case BASIS_PNHO: case BASIS_NHO: - orbitals.setValueIsAdjusting(true); - orbitals.setSelectedIndex(pickNHO_v(tok2[2], tok2[5], (DefaultListModel<String>) orbitals.getModel())); - orbitals.setValueIsAdjusting(false); + showOrbital(selectOnNHO(tok2[2], tok2[5], list)); break; case BASIS_PNBO: case BASIS_NBO: case BASIS_PNLMO: case BASIS_NLMO: - orbitals.setValueIsAdjusting(true); - orbitals.setSelectedIndex(pickNBO_v(tok2[2], tok2[5], (DefaultListModel<String>) orbitals.getModel())); - orbitals.setValueIsAdjusting(false); + showOrbital(selectOnNBO(tok2[2], tok2[5], list)); break; } } } - protected int pickNBO_v(String at1, String at2, DefaultListModel<String> list) { + protected void showOrbital(int i) { + if (i < 0) + return; + orbitals.bsOn.clearAll(); + orbitals.bsNeg.clearAll(); + runScriptNow("isosurface * off"); + orbitals.updateIsosurfacesInJmol(i); + } + + protected int findNextAtomicOrbital(String atomno, AbstractListModel<String> list) { + int ind = Integer.parseInt(atomno) - 1; + String at = vwr.ms.at[ind].getElementSymbol() + atomno + "("; + int curr = (currOrb.contains(at) ? orbitals.getSelectedIndex() : -1); + for (int i = curr + 1, size = list.getSize(); i < size + curr; i++) { + String str = list.getElementAt(i % size).replaceAll(" ", ""); + if (!str.contains(at + "lp)") && !str.contains(at + "ry)")) + continue; + orbitals.setSelectedIndex(i % size); + currOrb = str; + return i % size; + } + return curr; + } + + protected int selectOnNBO(String at1, String at2, DefaultListModel<String> list) { String bond = at1 + "-" + at2; - int curr = 0, size = list.getSize(); + int curr = -1, size = list.getSize(); if (currOrb.replace(" ", "").contains(bond)) curr = list.indexOf(currOrb); for (int i = curr + 1; i < size + curr; i++) { @@ -1244,10 +1268,10 @@ return curr; } - protected int pickNHO_v(String at1, String at2, DefaultListModel<String> list) { + protected int selectOnNHO(String at1, String at2, DefaultListModel<String> list) { String bond = at1 + "(" + at2 + ")"; String bond2 = at2 + "(" + at1 + ")"; - int curr = 0, size = list.getSize(); + int curr = -1, size = list.getSize(); if (currOrb.replace(" ", "").contains(bond)) curr = list.indexOf(currOrb); for (int i = curr + 1; i < size + curr; i++) { @@ -1274,7 +1298,6 @@ } } - @SuppressWarnings("unchecked") protected void notifyLoad_v() { @@ -1311,7 +1334,7 @@ betaSpin.setVisible(isOpenShell); // old setDefaultParameterArrays(); - + for (int i = 0; i < planeFields.length; i++) planeFields[i] = new JTextField(plVal[i]); for (int i = 0; i < vectorFields.length; i++) @@ -1333,7 +1356,11 @@ viewSettingsBox.setVisible(!jmolOptionNONBO); // set list - + + if (type.startsWith("P")) + type = type.substring(1); + if (type.equalsIgnoreCase("NLMO")) + type = "NBO"; String[] a = ((Map<String, String[]>) moData.get("nboLabelMap")) .get((isBeta ? "beta_" : "") + type); DefaultListModel<String> list = (isBeta ? betaList : alphaList); @@ -1345,9 +1372,9 @@ e.printStackTrace(); } colorMeshes(); -// showAtomNums(true); -// setBonds(true); - + // showAtomNums(true); + // setBonds(true); + } protected void setViewerBasis() { @@ -1369,9 +1396,9 @@ } /** - * reset the arrays of values that will be sent to NBOServe - * to their default values. - * + * reset the arrays of values that will be sent to NBOServe to their default + * values. + * */ protected void setDefaultParameterArrays() { plVal = new String[] { "1", "2", "3", "0.5", "0.0", "0.0", "0.0", "-3.0", @@ -1381,16 +1408,13 @@ lineVal = new String[] { "0.03", "0.05", "4", "0.05", "0.05", "0.1", "0.1" }; } - - - class OrbitalList extends JList<String> implements ListSelectionListener, MouseListener, KeyListener { protected BS bsOn = new BS(); protected BS bsNeg = new BS(); private BS bsKnown = new BS(); - + public OrbitalList() { super(); setLayoutOrientation(JList.VERTICAL_WRAP); @@ -1405,16 +1429,15 @@ super.addElement(s); } }); - setCellRenderer(new ListCellRenderer<String>(){ + setCellRenderer(new ListCellRenderer<String>() { - @Override public Component getListCellRendererComponent(JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) { return renderCell(index); - } + } }); addListSelectionListener(this); addMouseListener(this); @@ -1424,10 +1447,10 @@ setSelectedIndices(new int[0]); setModel(list); //setColorScheme(); -// if (isNew) { -// clearOrbitals(false); -// setLastOrbitalSelection(); -// } + // if (isNew) { + // clearOrbitals(false); + // setLastOrbitalSelection(); + // } for (int i = list.getSize(); --i >= 0;) setLabel(i); clearOrbitals(true); @@ -1436,8 +1459,8 @@ private JLabel cellLabel; protected boolean myTurn; - - protected Component renderCell(int index) { + + protected Component renderCell(int index) { if (cellLabel == null) { cellLabel = new JLabel() { @Override @@ -1452,12 +1475,13 @@ cellLabel.setText(getModel().getElementAt(index)); cellLabel.setOpaque(true); myTurn = true; - Color bgcolor = (!bsOn.get(index) ? Color.WHITE : bsNeg.get(index) ? orbColor2 : orbColor1); + Color bgcolor = (!bsOn.get(index) ? Color.WHITE + : bsNeg.get(index) ? orbColor2 : orbColor1); cellLabel.setBackground(bgcolor); cellLabel.setForeground(getContrastColor(bgcolor)); myTurn = false; - return cellLabel; + return cellLabel; } private Color getContrastColor(Color bgcolor) { @@ -1467,11 +1491,11 @@ /** * Clear the orbital display bitsets. * - * @param clearAll + * @param clearAll */ protected void clearOrbitals(boolean clearAll) { bsKnown.clearAll(); - if (clearAll) { + if (clearAll) { bsOn.clearAll(); bsNeg.clearAll(); } @@ -1492,33 +1516,35 @@ * * @param iClicked * negative: set the current list selection using BsON - * Integer.MAX_VALUE: set the current BsON from the list selection (keyboard drag, for example) - * otherwise: toggle the specified orbital index on or off + * Integer.MAX_VALUE: set the current BsON from the list selection + * (keyboard drag, for example) otherwise: toggle the specified + * orbital index on or off * */ protected void updateIsosurfacesInJmol(int iClicked) { DefaultListModel<String> model = (DefaultListModel<String>) getModel(); - boolean isBeta = betaSpin.isSelected(); + boolean isBeta = betaSpin.isSelected(); String type = comboBasis.getSelectedItem().toString(); String script = "select visible;"; if (iClicked == Integer.MAX_VALUE) script += updateBitSetFromModel(); else updateModelFromBitSet(); - //System.out.println("update " + bsOn + " " + bsKnown + " " + iClicked); + //System.out.println("update " + bsOn + " " + bsKnown + " " + iClicked); for (int i = model.getSize(); --i >= 0;) { boolean isOn = bsOn.get(i); - if (i == iClicked || isOn && !bsKnown.get(i) || isSelectedIndex(i) != isOn) { + if (i == iClicked || isOn && !bsKnown.get(i) + || isSelectedIndex(i) != isOn) { String id = "mo" + i; if (!isOn || bsKnown.get(i)) bsOn.setBitTo(i, !isOn); - boolean isKnown = bsKnown.get(i); + boolean isKnown = bsKnown.get(i); if (isKnown && !bsOn.get(i)) { // just turn it off - script += "isosurface mo" + i + " off;"; - } else if (isKnown){ + script += "isosurface mo" + i + " off;"; + } else if (isKnown) { // just turn it on - script += "isosurface mo" + i + " on;"; + script += "isosurface mo" + i + " on;"; } else { bsKnown.set(i); // create the isosurface @@ -1528,7 +1554,7 @@ } updateModelFromBitSet(); runScriptQueued(script); -// System.out.println("known" + bsKnown + " on" + bsOn + " neg" + bsNeg + " " + script); + // System.out.println("known" + bsKnown + " on" + bsOn + " neg" + bsNeg + " " + script); } private String updateBitSetFromModel() { @@ -1549,19 +1575,21 @@ } return script; } - + private void updateModelFromBitSet() { int[] a = new int[bsOn.cardinality()]; - for (int i = bsOn.nextSetBit(0), pt = 0; i >= 0; i = bsOn.nextSetBit(i + 1)) - a[pt++] = i; - try { - setSelectedIndices(a); - //System.out.println("on neg " + bsOn + " " + bsNeg + " " + PT.toJSON(null, a)); + for (int i = bsOn.nextSetBit(0), pt = 0; i >= 0; i = bsOn + .nextSetBit(i + 1)) + a[pt++] = i; + try { + setSelectedIndices(a); + //System.out.println("on neg " + bsOn + " " + bsNeg + " " + PT.toJSON(null, a)); } catch (Exception e) { System.out.println("render error " + e); // this is due to underlying list changing. Ignore } } + @Override public void valueChanged(ListSelectionEvent e) { } @@ -1582,25 +1610,25 @@ @Override public void mousePressed(MouseEvent e) { -// System.out.println("PRESS" + e); -// System.out.println("press " + PT.toJSON(null, getSelectedIndices()) + e.getClickCount()); + // System.out.println("PRESS" + e); + // System.out.println("press " + PT.toJSON(null, getSelectedIndices()) + e.getClickCount()); } - @Override public void mouseReleased(MouseEvent e) { -// System.out.println("RELEASE" + e); -// System.out.println("release " + PT.toJSON(null, getSelectedIndices())); + // System.out.println("RELEASE" + e); + // System.out.println("release " + PT.toJSON(null, getSelectedIndices())); } private long lastTime = 0; private int lastPicked = 999; private final static long DBLCLICK_THRESHOLD_MS = 300; - + @Override public void mouseClicked(MouseEvent e) { - int i = getSelectedIndex(); - if (e.getClickCount() > 1 || lastPicked == i && System.currentTimeMillis() - lastTime < DBLCLICK_THRESHOLD_MS) { + int i = getSelectedIndex(); + if (e.getClickCount() > 1 || lastPicked == i + && System.currentTimeMillis() - lastTime < DBLCLICK_THRESHOLD_MS) { toggleOrbitalNegation(i); } updateIsosurfacesInJmol(i); @@ -1618,12 +1646,12 @@ @Override public void keyPressed(KeyEvent e) { -// System.out.println("KEYDN" + orbitals.getSelectedIndex() + " " + e); + // System.out.println("KEYDN" + orbitals.getSelectedIndex() + " " + e); } - + @Override public void keyReleased(KeyEvent e) { -// System.out.println("KEYUP" + orbitals.getSelectedIndex() + " " + e); + // System.out.println("KEYUP" + orbitals.getSelectedIndex() + " " + e); updateIsosurfacesInJmol(Integer.MAX_VALUE); } @@ -1643,11 +1671,15 @@ * @param list * optional list to fill * @param statusMessage - * @param dataFileName optional - * @param fileData optional + * @param dataFileName + * optional + * @param fileData + * optional */ private void postNBO_v(SB sb, final int mode, - final DefaultListModel<String> list, String statusMessage, String dataFileName, String fileData) { + final DefaultListModel<String> list, + String statusMessage, String dataFileName, + String fileData) { final NBORequest req = new NBORequest(); req.set(new Runnable() { @Override @@ -1658,8 +1690,8 @@ nboService.postToNBO(req); } - protected String getJmolIsosurfaceScript(String id, String type, int i, boolean isBeta, - boolean isNegative) { + protected String getJmolIsosurfaceScript(String id, String type, int i, + boolean isBeta, boolean isNegative) { return ";select visible;isosurface " + id + " color " @@ -1706,5 +1738,5 @@ break; } } - + } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2017-01-31 02:36:40 UTC (rev 21368) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2017-01-31 04:29:18 UTC (rev 21369) @@ -533,6 +533,8 @@ String type = nboType; if (type.charAt(0) == 'P') type = type.substring(1); + if (type.equals("NLMO")) + type = "NBO"; tokens = map.get((betaOnly ? "beta_" : "") + type); moData.put("nboLabelMap", map); moData.put("nboLabels", tokens); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-31 13:51:48
|
Revision: 21372 http://sourceforge.net/p/jmol/code/21372 Author: hansonr Date: 2017-01-31 13:51:45 +0000 (Tue, 31 Jan 2017) Log Message: ----------- Jmol.___JmolVersion="14.8.2-beta-2017-01-31" new feature: startup options -U nbo or --plugin nbo - starts Jmol in NBO mode, as if the Tools...NBO menu item had been clicked - could be generalized, but do not that more than just nbo in place at this time - case insensitive debugging: adds set TESTFLAG2 to allow editing of requests to NBOServe Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOPlugin.java trunk/Jmol/src/org/gennbo/NBOService.java trunk/Jmol/src/org/jmol/scriptext/IsoExt.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Viewer.java trunk/Jmol/src/org/openscience/jmol/app/JmolApp.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -42,9 +42,7 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; -import java.io.IOException; import java.net.URI; -import java.net.URISyntaxException; import java.util.Map; import javajs.swing.SwingConstants; Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -96,7 +96,7 @@ protected int modelOrigin = ORIGIN_UNKNOWN; - private static final String DEFAULT_SCRIPT = "set bondpicking true;set multipleBondSpacing -0.5;set zoomlarge false;select none;"; + private static final String DEFAULT_SCRIPT = "zap;set bondpicking true;set multipleBondSpacing -0.5;set zoomlarge false;select none;"; protected static final String INPUT_FILE_EXTENSIONS = "adf;cfi;com;g09;gau;gms;jag;log;mm2;mnd;mol;mp;nw;orc;pqs;qc;vfi;xyz;47"; protected static final String OUTPUT_FILE_EXTENSIONS = "adf;cfi;gau;gms;jag;mm2;mnd;mp;nw;orc;pqs;qc;mol;xyz;vfi;g09;com"; @@ -773,7 +773,7 @@ private boolean connect() { - if (!nboService.connect()) + if (!nboService.haveGenNBO()) return false; boolean isOK = checkEnabled(); if (isOK) Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -1451,8 +1451,8 @@ // clearOrbitals(false); // setLastOrbitalSelection(); // } - for (int i = list.getSize(); --i >= 0;) - setLabel(i); + //for (int i = list.getSize(); --i >= 0;) + //setLabel(i); clearOrbitals(true); updateIsosurfacesInJmol(Integer.MIN_VALUE); } @@ -1597,16 +1597,16 @@ private void toggleOrbitalNegation(int i) { bsNeg.setBitTo(i, !bsNeg.get(i)); bsKnown.clear(i); // to - just switch colors? - setLabel(i); + //setLabel(i); } - protected void setLabel(int i) { - String label0 = getModel().getElementAt(i); - int pt = label0.indexOf('['); - if (pt > 0) - label0 = label0.substring(0, pt); - ((DefaultListModel<String>) getModel()).set(i, label0.trim() + " "); - } +// protected void setLabel(int i) { +// String label0 = getModel().getElementAt(i); +// int pt = label0.indexOf('['); +// if (pt > 0) +// label0 = label0.substring(0, pt); +// ((DefaultListModel<String>) getModel()).set(i, label0.trim() + " "); +// } @Override public void mousePressed(MouseEvent e) { Modified: trunk/Jmol/src/org/gennbo/NBOPlugin.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOPlugin.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/gennbo/NBOPlugin.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -42,6 +42,9 @@ @Override public void start(JFrame frame, Viewer vwr, Map<String, Object> jmolOptions) { this.vwr = vwr; + if (getNBOProperty("serverPath", null) == null) { + vwr.alert("NBOServe.exe has not been installed. See http://nbo6.chem.wisc.edu/new6_css.htm for additional information"); + } nboDialog = new NBODialog(this, frame, vwr, jmolOptions); System.out.println("NBO Plugin started."); } Modified: trunk/Jmol/src/org/gennbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOService.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/gennbo/NBOService.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -33,6 +33,7 @@ import javajs.util.AU; import javajs.util.PT; +import org.jmol.script.T; import org.jmol.util.Logger; import org.jmol.viewer.Viewer; @@ -157,8 +158,8 @@ protected Object lock; protected Queue<NBORequest> requestQueue; - private PrintWriter stdinWriter; - protected BufferedInputStream stdout; + private PrintWriter nboIn; + protected BufferedInputStream nboOut; private boolean cantStartServer; private String serverPath; @@ -188,6 +189,10 @@ lock = new Object(); } + ////////////////////// Initialization ////////////////////////// + + + /** * Check to see if we have tried and are not able to make contact with NBOServe at the designated location. * @@ -230,38 +235,21 @@ } /** - * Set the current request by writing its metacommands to disk and sending a - * command to NBOServe directing it to that file. + * Check to see if there is a current request running * - * @param request + * @return true if there is a current request + * */ - protected void startRequest(NBORequest request) { - if (request == null) - return; - currentRequest = request; - String cmdFileName = null, data = null; - for (int j = 0, n = request.fileData.length; j < n; j += 2) { - // we must do file 0 last, as it is the command - int i = (j + 2) % n; - cmdFileName = request.fileData[i]; - data = request.fileData[i + 1]; - if (cmdFileName != null) { - System.out.println("saving file " + cmdFileName + "\n" + data); - nboDialog.inputFileHandler.writeToFile(getServerPath(cmdFileName), - data); - } - } - nboDialog.setStatus(request.statusInfo); - String cmd = "<" + cmdFileName + ">"; + public boolean isWorking() { + return (currentRequest != null); + } + + ////////////////////// NBOServe Process ////////////////////////// + + byte[] buffer = new byte[1024]; + String cachedReply = ""; - System.out.println("sending " + cmd); - - if (stdinWriter == null) - restart(); - stdinWriter.println(cmd); - stdinWriter.flush(); - } - + /** * Start the ProcessBuilder for NBOServe and listen to its stdout (Fortran LFN * 6, a Java BufferedInputStream). We simply look for available bytes and listen @@ -293,57 +281,73 @@ * are successful */ String startProcess() { - System.out.println("startProcess"); try { cantStartServer = true; if (!doConnect) return null; nboListener = null; - System.out.println("starting NBO process"); String path = getServerPath(exeName); + + System.out.println("startProcess: " + path); + ProcessBuilder builder = new ProcessBuilder(path); + builder.directory(new File(new File(path).getParent())); // root folder for executable builder.redirectErrorStream(true); nboServer = builder.start(); - stdout = (BufferedInputStream) nboServer.getInputStream(); + + // pick up the NBO stdout + + nboOut = (BufferedInputStream) nboServer.getInputStream(); + System.out.println("startProcess:" + nboServer); + + // start a listener + nboListener = new Thread(new Runnable() { @Override public void run() { - //boolean haveStart = false; - byte[] buffer = new byte[1024]; + + String s; + while (!Thread.currentThread().isInterrupted()) { try { - int n = stdout.available(); - if (n <= 0) + + // Get and process the return, continuing if incomplete or no activity. + + if ((s = getNBOMessage()) == null || !processServerReturn(s)) continue; - isReady = true; - int m = 0; - do { - n = m; - Thread.sleep(10); - } while ((m = stdout.available()) > n); - while (n > buffer.length) { - buffer = AU.doubleLengthByte(buffer); - } - n = stdout.read(buffer, 0, n); - String s = new String(buffer, 0, n); - if (!processServerReturn(s)) - continue; + + // Success! + + cachedReply = ""; nboDialog.setStatus(""); + + // Get the next request. Note that we leave the currentRequest on + // the Queue because that indicates we are still working. + + // Note that we FIRST check for messages, as NBOServe will have an + // unsolicited startup message for us providing license information. + + startRequest(currentRequest = requestQueue.peek()); + } catch (Throwable e1) { clearQueue(); nboDialog.setStatus(e1.getMessage()); continue; // includes thread death } - startRequest(currentRequest = requestQueue.peek()); + } } }); nboListener.setName("NBOServiceThread" + System.currentTimeMillis()); nboListener.start(); - stdinWriter = new PrintWriter(nboServer.getOutputStream()); + + // open a channel to NBOServe's stdin. + + nboIn = new PrintWriter(nboServer.getOutputStream()); + } catch (IOException e) { nboDialog.logInfo(e.getMessage(), Logger.LEVEL_ERROR); return e.getMessage(); @@ -353,46 +357,72 @@ } /** - * Log a message to NBODialog; probably an error. + * Retrieve a message from NBOServe by monitoring its sysout (a + * BufferedInputStream for us). * - * @param line - * @param level + * @return new NBO output, or null if no activity + * + * @throws IOException + * @throws InterruptedException */ - protected void logServerLine(String line, int level) { - nboDialog.logInfo(line, level); - } + protected String getNBOMessage() throws IOException, InterruptedException { + + // 1. Check for available bytes. + + int n = nboOut.available(); + if (n <= 0) { + return null; + } + + // 2. Monitor every 10 ms until no further activity. + + isReady = true; + int m = 0; + do { + n = m; + Thread.sleep(10); + } while ((m = nboOut.available()) > n); + while (n > buffer.length) { + buffer = AU.doubleLengthByte(buffer); + } + + // 3. Read the bytes into a single string and deliver that. + // No need for a line buffer here. + + // (The problem we were having originally is that we were using + // a BufferedReader, and it was blocking.) - /** - * Check for known errors; PG is the Portland Group Compiler - * @param line - * @return true if a recognized error has been found. - */ - protected boolean isFortranError(String line) { - return line.indexOf("Permission denied") >= 0 - || line.indexOf("PGFIO-F") >= 0 - || line.indexOf("Invalid command") >= 0; + // 4. Deliver standard Java format without carriage return. + + n = nboOut.read(buffer, 0, n); + return cachedReply = cachedReply + PT.rep(new String(buffer, 0, n), "\r", ""); } /** * Close the process and all channels associated with it. */ public void closeProcess() { + isReady = false; - stdout = null; + nboOut = null; + try { - stdinWriter.close(); + nboIn.close(); } catch (Exception e) { } - stdinWriter = null; + nboIn = null; + try { nboListener.interrupt(); } catch (Exception e) { System.out.println("can't interrupt"); } nboListener = null; + try { nboServer.destroy(); } catch (Exception e) { + // we don't care } nboServer = null; } @@ -420,38 +450,14 @@ } /** - * The interface for ALL communication with NBOServe from NBODialog. + * Take a quick look to see that gennbo.bat is present and notify the user if it is not. * - * @param request + * Note that this is the only method that is marginally Windows-dependent. * - */ - protected void postToNBO(NBORequest request) { - synchronized (lock) { - postToQueue(request); - } - } - - /** - * Post a request to - * @param j - */ - private void postToQueue(NBORequest j) { - if (isReady && requestQueue.isEmpty() && currentRequest == null) { - currentRequest = j; - requestQueue.add(currentRequest); - startRequest(currentRequest); - } else { - requestQueue.add(j); - } - } - - /** - * Take a quick look to see that gennbo.bat is present and notify the user if it is not. - * * @return true if gennbo.bat exists. * */ - public boolean connect() { + public boolean haveGenNBO() { if (!doConnect) return true; File f = new File(getServerPath("gennbo.bat")); @@ -463,7 +469,27 @@ return true; } + ////////////////////// Request Queue ////////////////////////// + /** + * The interface for ALL communication with NBOServe from NBODialog. + * + * @param request + * + */ + protected void postToNBO(NBORequest request) { + synchronized (lock) { + if (isReady && requestQueue.isEmpty() && currentRequest == null) { + currentRequest = request; + requestQueue.add(currentRequest); + startRequest(currentRequest); + } else { + requestQueue.add(request); + } + } + } + + /** * Clear the request queue * */ @@ -471,19 +497,57 @@ requestQueue.clear(); } + + //////////////////////////// Send Request to NBOServe /////////////////////////// + /** - * Check to see if there is a current request running + * Start the current request by writing its metacommands to disk and sending a + * command to NBOServe directing it to that file via its stdin. * - * @return true if there is a current request + * We allow the Jmol command * + * set TESTFLAG2 TRUE + * + * to give us an alert just prior to sending the command to NBOServe. + * This allows us to edit these files in PSPad (which will scan for changed + * files and load them again if requested) and thus send any modification we + * want to NBOServe for testing. + * + * @param request */ - public boolean isWorking() { - return (currentRequest != null); - } + protected void startRequest(NBORequest request) { + if (request == null) + return; + currentRequest = request; + String cmdFileName = null, data = null, list = ""; + for (int i = 2, n = request.fileData.length; i < n + 2; i += 2) { + + cmdFileName = request.fileData[i%n]; + data = request.fileData[(i + 1)%n]; + if (cmdFileName != null) { + list += " " + cmdFileName; + nboDialog.inputFileHandler.writeToFile(getServerPath(cmdFileName), + data); + System.out.println("saved file " + cmdFileName + "\n" + data + "\n"); + } + } + nboDialog.setStatus(request.statusInfo); + String cmd = "<" + cmdFileName + ">"; + + System.out.println("sending " + cmd); + + if (vwr.getBoolean(T.testflag2)) + vwr.alert("files " + list + " have been generated; ready to send " + cmd + "\n\n" + data); + + if (nboIn == null) + restart(); + nboIn.println(cmd); + nboIn.flush(); + } + + //////////////////////////// Process NBO's Reply /////////////////////////// - //// new /////// - /** * Process the return from NBOServe. * @@ -491,6 +555,9 @@ * @return true if we are done */ protected boolean processServerReturn(String s) { + + // Check for the worst + if (s.indexOf("FORTRAN STOP") >= 0) { nboDialog.alertError("NBOServe has stopped working - restarting"); clearQueue(); @@ -507,12 +574,12 @@ return true; } - s = PT.rep(s, "\r", ""); // to standard Java format without carriage return. - - System.out.println("NBO reply:\n" + s); - int pt; + // We don't always remove the request, because in the case of RUN, + // we are prone to get additional sysout message from other processes, + // particularly gennbo.bat. These will come BEFORE the start message. + boolean removeRequest = true; try { // with finally clause to remove request from queue @@ -566,6 +633,27 @@ } } + /** + * Log a message to NBODialog; probably an error. + * + * @param line + * @param level + */ + protected void logServerLine(String line, int level) { + nboDialog.logInfo(line, level); + } + + /** + * Check for known errors; PG is the Portland Group Compiler + * @param line + * @return true if a recognized error has been found. + */ + protected boolean isFortranError(String line) { + return line.indexOf("Permission denied") >= 0 + || line.indexOf("PGFIO-F") >= 0 + || line.indexOf("Invalid command") >= 0; + } + } Modified: trunk/Jmol/src/org/jmol/scriptext/IsoExt.java =================================================================== --- trunk/Jmol/src/org/jmol/scriptext/IsoExt.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/jmol/scriptext/IsoExt.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -823,11 +823,8 @@ boolean isViewOnly = e.optParameterAsString(1).equals("view"); if (e.slen == 1 || isViewOnly || e.optParameterAsString(1).equals("options")) { if (!chk) { - Map<String, Object> htParams = new Hashtable<String, Object>(); - htParams.put("service", "nbo"); - htParams.put("action", "showPanel"); - htParams.put("options", (isViewOnly ? "VIEW" : e.optParameterAsString(2))); - vwr.sm.processService(htParams); + String options = (isViewOnly ? "VIEW" : e.optParameterAsString(2)); + vwr.startNBO(options); } return; } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-01-31 13:51:45 UTC (rev 21372) @@ -49,8 +49,15 @@ # 10. Run jmol/tools build-release.xml # -Jmol.___JmolVersion="14.8.2-beta-2017-01-30" +Jmol.___JmolVersion="14.8.2-beta-2017-01-31" +new feature: startup options -U nbo or --plugin nbo + - starts Jmol in NBO mode, as if the Tools...NBO menu item had been clicked + - could be generalized, but do not that more than just nbo in place at this time + - case insensitive + +debugging: adds set TESTFLAG2 to allow editing of requests to NBOServe + bug fix: NBO plug-in fixes bug fix: La and Ac should be in trasitionmetal Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -634,7 +634,7 @@ stm.setJmolDefaults(); // this code will be shared between Jmol 14.0 and 14.1 Elements.covalentVersion = Elements.RAD_COV_BODR_2014_02_22; - allowArrayDotNotation = true; + allowArrayDotNotation = true; } public void setDisplay(Object canvas) { @@ -5255,6 +5255,7 @@ // passed to MOCalcuation, but not used // nciCalculation special params.testFlag = 2 "absolute" calc. // GIF reducedColors + // plugin-in use variable return g.testFlag2; case T.testflag3: // isosurface numbers @@ -9490,9 +9491,28 @@ return (am.cmi >= 0 ? ms.getModelAuxiliaryInfo(am.cmi) : null); } + public void startNBO(String options) { + Map<String, Object> htParams = new Hashtable<String, Object>(); + htParams.put("service", "nbo"); + htParams.put("action", "showPanel"); + htParams.put("options", options); + sm.processService(htParams); + } - + /** + * startup -U nbo option + * + * @param plugin + */ + public void startPlugin(String plugin) { + + // for now, just NBO; need a way to bootstrap this + + if ("nbo".equalsIgnoreCase(plugin)) + startNBO("all"); + } + } Modified: trunk/Jmol/src/org/openscience/jmol/app/JmolApp.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/JmolApp.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/openscience/jmol/app/JmolApp.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -37,6 +37,7 @@ import org.jmol.i18n.GT; import org.jmol.util.Logger; +import org.jmol.viewer.Viewer; import org.jmol.api.JmolAppAPI; import org.jmol.api.JmolViewer; @@ -212,6 +213,8 @@ options.addOption("t", "threaded", false, GT._("independent command thread")); + options.addOption("U", "plugin", true, GT._("plugin to start initially")); + options.addOption("w","write", true,GT.o(GT._("{0} or {1}:filename"), new Object[] { "CLIP", "GIF|JPG|JPG64|PNG|PPM" })); @@ -369,6 +372,10 @@ scriptFilename = line.getOptionValue("s"); } + // plugin + if (line.hasOption("U")) + info.put("plugin", line.getOptionValue("U")); + // run post Jmol script if (line.hasOption("j")) { script2 = line.getOptionValue("j"); @@ -553,6 +560,13 @@ runScript(script2, isJmolData, vwr); } + // finally plugin + + // -U flag + String plugin = (String) info.get("plugin"); + if (plugin != null) + ((Viewer) vwr).startPlugin(plugin); + // scanner input if (scanInput) { new InputScannerThread(vwr, isSilent); Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-31 04:33:44 UTC (rev 21371) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-31 13:51:45 UTC (rev 21372) @@ -1171,10 +1171,6 @@ */ void startNBO(Map<String, Object> jmolOptions) { - String nboServerPath = getPluginOption("NBO", "serverPath", null); - if (nboServerPath == null) { - vwr.alert("NBOServe.exe has not been installed. See http://nbo6.chem.wisc.edu/new6_css.htm for additional information"); - } showPlugin("NBO", "org.gennbo.NBOPlugin", jmolOptions); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-01-31 23:38:03
|
Revision: 21373 http://sourceforge.net/p/jmol/code/21373 Author: hansonr Date: 2017-01-31 23:38:01 +0000 (Tue, 31 Jan 2017) Log Message: ----------- NBO -- several additional touches -- Search, View upgrades Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOPlugin.java trunk/Jmol/src/org/gennbo/NBORequest.java trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/GuiMap.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties Added Paths: ----------- trunk/Jmol/src/org/openscience/jmol/app/plugins/ trunk/Jmol/src/org/openscience/jmol/app/plugins/plugin.properties Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -35,7 +35,6 @@ import java.awt.GridLayout; import java.awt.Image; import java.awt.Insets; -import java.awt.Point; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -129,13 +128,13 @@ this.vwr = vwr; setJmolOptions(jmolOptions); this.nboService = new NBOService(this, vwr, !jmolOptionNONBO); - this.setIconImage(getIcon("nbo6logo20x20").getImage()); + this.setIconImage(nboPlugin.getIcon("nbo6logo20x20").getImage()); this.setLayout(new BorderLayout()); sendDefaultScript(); //get saved properties - createDialog(jmolFrame.getBounds()); + createDialog(jmolFrame); if (!jmolOptionNOSET) setDefaults(false); @@ -144,17 +143,107 @@ this.openPanel(DIALOG_VIEW); } - protected Component getComponentatPoint(Point p, Component top){ - Component c = null; - if(top.isShowing()) { - do{ - c = ((Container) top).findComponentAt(p); - }while(!(c instanceof Container)); + protected void openPanel(char type) { + if (jmolOptionNONBO && "rsm".indexOf("" + type) >= 0) { + vwr.alert("This option requires NBOServe"); + return; + } + if (type == 'c') { + settingsDialog.setVisible(true); + return; } - return c; + + if (nboService.isWorking()) { + int i = JOptionPane.showConfirmDialog(this, + "NBOServe is working. Cancel current job?\n" + + "This could affect input/output files\n" + + "if GenNBO is running.", "Message", JOptionPane.YES_NO_OPTION); + if (i == JOptionPane.NO_OPTION) { + return; + } + } + + nboService.restart(); + String msg = ""; + switch (type) { + case DIALOG_MODEL: + msg = "MODEL"; + break; + case DIALOG_RUN: + msg = "RUN"; + break; + case DIALOG_VIEW: + msg = "VIEW"; + break; + case DIALOG_SEARCH: + msg = "SEARCH"; + break; + } + log("Entering " + msg, 'I'); + + + if (!jmolOptionNOZAP) // use Jmol command NBO OPTIONS NOZAP to allow this + runScriptNow("zap"); + nboService.restartIfNecessary(); + if (dialogMode == DIALOG_HOME) { + remove(homePanel); + add(centerPanel, BorderLayout.CENTER); + if (type != 'c') + dialogMode = type; + } + switch (dialogMode) { + case DIALOG_VIEW: + case DIALOG_SEARCH: + runScriptNow("select none"); + break; + } + nboService.clearQueue(); + viewSettingsBox.setVisible(false); + if (!checkEnabled()) + type = 'c'; + if (topPanel != null) { + topPanel.remove(icon); + } + switch (type) { + case 'm': + dialogMode = DIALOG_MODEL; + centerPanel.setLeftComponent(modulePanel = buildModelPanel()); + icon = new JLabel(nboPlugin.getIcon("nbomodel_logo")); + setThis(modelButton); + break; + case 'r': + dialogMode = DIALOG_RUN; + centerPanel.setLeftComponent(modulePanel = buildRunPanel()); + icon = new JLabel(nboPlugin.getIcon("nborun_logo")); + setThis(runButton); + break; + case 'v': + dialogMode = DIALOG_VIEW; + centerPanel.setLeftComponent(modulePanel = buildViewPanel()); + icon = new JLabel(nboPlugin.getIcon("nboview_logo")); + setThis(viewButton); + break; + case 's': + dialogMode = DIALOG_SEARCH; + centerPanel.setLeftComponent(modulePanel = buildSearchPanel()); + //settingsBox.setVisible(true); + icon = new JLabel(nboPlugin.getIcon("nbosearch_logo")); + setThis(searchButton); + break; + } + centerPanel.setDividerLocation(350); + if (topPanel != null) + topPanel.add(icon, BorderLayout.EAST); + this.statusLab.setText(""); + invalidate(); + setVisible(true); } - private void createDialog(Rectangle bounds) { + private void createDialog(JFrame jmolFrame) { + + Rectangle bounds = jmolFrame.getBounds(); + if (bounds.height < 630) + jmolFrame.setSize(bounds.width, 630); dialogMode = DIALOG_HOME; // createDialog(Math.max(570, 615); setBounds(bounds.x + bounds.width, bounds.y, 615, Math.max(bounds.height, 630)); @@ -229,9 +318,9 @@ private void placeNBODialog(JDialog d) { Dimension screenSize = d.getToolkit().getScreenSize(); Dimension size = d.getSize(); + int x = Math.min(screenSize.width - size.width, + d.getParent().getX()+d.getParent().getWidth()) - 20; int y = d.getParent().getY(); - int x = Math.min(screenSize.width - size.width, - d.getParent().getX()+d.getParent().getWidth()); System.out.println("------" + x + " " + y); d.setLocation(x, y); } @@ -341,7 +430,7 @@ p.setLayout(new BoxLayout(p,BoxLayout.Y_AXIS)); //Header stuff//////////// - ImageIcon imageIcon = getIcon("nbo6logo"); + ImageIcon imageIcon = nboPlugin.getIcon("nbo6logo"); Image image = imageIcon.getImage(); Image newimg = image.getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH); @@ -534,7 +623,7 @@ // p.add(b); JTextPane t = new JTextPane(); t.setContentType("text/html"); - t.setText("<HTML><Font color=\"RED\"><center>\u00a9Copyright 2016 Board of Regents of the University of Wisconsin System " + + t.setText("<HTML><Font color=\"RED\"><center>\u00a9Copyright 2017 Board of Regents of the University of Wisconsin System " + "on behalf of \nthe Theoretical Chemistry Institute. All Rights Reserved</center></font></HTML>"); t.setForeground(Color.RED); @@ -547,10 +636,6 @@ return p; } - private ImageIcon getIcon(String name) { - return new ImageIcon(this.getClass().getResource("assets/" + name + ".gif")); - } - protected void nboOutput() { nboOutput = new JPanel(new BorderLayout()); viewSettingsBox = new JPanel(new BorderLayout()); @@ -629,101 +714,6 @@ } - protected void openPanel(char type) { - if (jmolOptionNONBO && "rsm".indexOf("" + type) >= 0) { - vwr.alert("This option requires NBOServe"); - return; - } - if (type == 'c') { - settingsDialog.setVisible(true); - return; - } - - if (nboService.isWorking()) { - int i = JOptionPane.showConfirmDialog(this, - "NBOServe is working. Cancel current job?\n" - + "This could affect input/output files\n" - + "if GenNBO is running.", "Message", JOptionPane.YES_NO_OPTION); - if (i == JOptionPane.NO_OPTION) { - return; - } - } - - String msg = ""; - switch (type) { - case DIALOG_MODEL: - msg = "MODEL"; - break; - case DIALOG_RUN: - msg = "RUN"; - break; - case DIALOG_VIEW: - msg = "VIEW"; - break; - case DIALOG_SEARCH: - msg = "SEARCH"; - break; - } - log("Entering " + msg, 'I'); - - - if (!jmolOptionNOZAP) // use Jmol command NBO OPTIONS NOZAP to allow this - runScriptNow("zap"); - nboService.restartIfNecessary(); - if (dialogMode == DIALOG_HOME) { - remove(homePanel); - add(centerPanel, BorderLayout.CENTER); - if (type != 'c') - dialogMode = type; - } - switch (dialogMode) { - case DIALOG_VIEW: - case DIALOG_SEARCH: - runScriptNow("select none"); - break; - } - nboService.clearQueue(); - viewSettingsBox.setVisible(false); - if (!checkEnabled()) - type = 'c'; - if (topPanel != null) { - topPanel.remove(icon); - } - switch (type) { - case 'm': - dialogMode = DIALOG_MODEL; - centerPanel.setLeftComponent(modulePanel = buildModelPanel()); - icon = new JLabel(getIcon("nbomodel_logo")); - setThis(modelButton); - break; - case 'r': - dialogMode = DIALOG_RUN; - centerPanel.setLeftComponent(modulePanel = buildRunPanel()); - icon = new JLabel(getIcon("nborun_logo")); - setThis(runButton); - break; - case 'v': - dialogMode = DIALOG_VIEW; - centerPanel.setLeftComponent(modulePanel = buildViewPanel()); - icon = new JLabel(getIcon("nboview_logo")); - setThis(viewButton); - break; - case 's': - dialogMode = DIALOG_SEARCH; - centerPanel.setLeftComponent(modulePanel = buildSearchPanel()); - //settingsBox.setVisible(true); - icon = new JLabel(getIcon("nbosearch_logo")); - setThis(searchButton); - break; - } - centerPanel.setDividerLocation(350); - if (topPanel != null) - topPanel.add(icon, BorderLayout.EAST); - this.statusLab.setText(""); - invalidate(); - setVisible(true); - } - protected void setThis(JButton btn) { for(Component c:((Container)topPanel.getComponent(0)).getComponents()){ if(c instanceof JButton){ @@ -800,21 +790,6 @@ } } - void alert(String msg) { - try { - switch (dialogMode) { - case DIALOG_MODEL: - case DIALOG_RUN: - case DIALOG_VIEW: - case DIALOG_SEARCH: - log(msg,'b'); - break; - } - } catch (Exception e) { - alertError(msg); - } - } - /** * clear output panel */ @@ -825,13 +800,13 @@ jpNBODialog.setText(""); } - protected boolean checkJmolNBO(){ - return(vwr.ms.getInfo(vwr.am.cmi, "nboType") != null || - NBOFileHandler.getExt(inputFileHandler.inputFile).equals("47")); - } +// protected boolean checkJmolNBO(){ +// return(vwr.ms.getInfo(vwr.am.cmi, "nboType") != null || +// NBOFileHandler.getExt(inputFileHandler.inputFile).equals("47")); +// } void setStatus(String statusInfo) { - if (statusInfo.length() > 0) + if (statusInfo != null && statusInfo.length() > 0) log(statusInfo, 'p'); statusLab.setText(statusInfo); } @@ -872,4 +847,15 @@ return new NBOFileHandler(name, ext, mode, useExt, this); } +// protected Component getComponentatPoint(Point p, Component top){ +// Component c = null; +// if(top.isShowing()) { +// do{ +// c = ((Container) top).findComponentAt(p); +// }while(!(c instanceof Container)); +// } +// return c; +// } + + } Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -1100,9 +1100,6 @@ for (Component c : panel.getComponents()) c.setVisible(true); editBox.setVisible(true); - // 57 89 - ///@transitionMetal elemno>=21&elemno<=30|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112", - rebond.setEnabled(false); runScriptNow("select within(model,visible)"); String fileContents = evaluateJmolString("data({selected},'cfi')"); if (vwr.ms.ac > 0) @@ -1123,9 +1120,8 @@ redo.setEnabled(true); else redo.setEnabled(false); - String x = (String) vwr.evaluateExpression("{transitionMetal}"); // "({1})" - rebond.setEnabled(x.length() > 4); + rebond.setEnabled(((String) vwr.evaluateExpression("{transitionMetal}")).length() > 4); if (editAction == MODEL_ACTION_MUTATE) { actionSelected(MODEL_ACTION_MUTATE); } Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -1234,13 +1234,17 @@ } protected void showOrbJmol(String type, int i, String id) { - + id = fixID(id); runScriptQueued( - "select visible;isosurface ID '" + id + "' delete;" + + "select visible;isosurface ID \"" + id + "\" delete;" + getJmolIsosurfaceScript(id, peeify(type), i, betaSpin.isSelected(), false)); } + private String fixID(String id) { + return PT.replaceAllCharacters(id, "'\"", "_"); + } + protected void orbPick() { if (rbSelection < 0) return; @@ -1279,98 +1283,6 @@ } } - // // OLD - // - // /** - // * Runs when list is finished being sent by nboServe -E2PERT: orbital - // * numbering of second list offset by length of first -NPA, STERIC, DIPOLE: - // * checks for more than 1 unit -NRT: gets res structure info - // * - // * @param list - // */ - // protected void setSearchList(AbstractListModel<String> list) { - // switch (keywordNumber) { - // case KEYWD_CMO: - // if (list.equals(list1)) { - // //moRb.doClick(); - // } - // break; - // case KEYWD_E2PERT: - // if (list.equals(list2)) { - // //Relabel a-nbo to correct orbital number - // int offset = list1.getSize(); - // int sz = list2.getSize(); - // ActionListener l = orb2.getActionListeners()[0]; - // orb2.removeActionListener(l); - // for (int i = 0; i < sz; i++) { - // String s = list2.getElementAt(i); - // list2.removeElementAt(i); - // s = " " + (offset + i + 1) + s.substring(s.indexOf(".")); - // - // list2.insertElementAt(s, i); - // } - // orb2.addActionListener(l); - // } - // //$FALL-THROUGH$ - // case KEYWD_NPA: - // case KEYWD_STERIC: - // case KEYWD_DIPOLE: - // if (list.equals(list3)) - // if (list3.getSize() == 1) { - // unit.setVisible(false); - // unitLabel.setVisible(true); - // unitLabel.setText(list3.getElementAt(0).substring(6)); - // } - // break; - // case KEYWD_NRT: - // if (list.equals(list3)) { - // changeKey(nrt); - // //Parsing RS list here ensures RS list will be in .nbo file - // parseRsList(getRSList()); - // unit.addActionListener(new ActionListener() { - // @Override - // public void actionPerformed(ActionEvent e) { - // if (isOpenShell) - // setResStruct(unit.getSelectedIndex() + 1, alphaSpin.isSelected()); - // else - // setResStruct(unit.getSelectedIndex() + 1, true); - // // try{ - // // Thread.sleep(100); - // // }catch(Exception e2){} - // - // } - // }); - // setResStruct(1, alphaSpin.isSelected()); - // } - // break; - // case KEYWD_OPBAS: - // case KEYWD_BAS1BAS2: - // if (list.equals(list2)) { - // orb.removeActionListener(orb.getActionListeners()[0]); - // orb.addActionListener(new ActionListener() { - // @Override - // public void actionPerformed(ActionEvent e) { - // showJmolNBO(basis.getSelectedItem().toString(), - // orb.getSelectedIndex() + 1); - // } - // }); - // orb2.removeActionListener(orb2.getActionListeners()[0]); - // orb2.addActionListener(new ActionListener() { - // @Override - // public void actionPerformed(ActionEvent e) { - // if (keywordNumber == KEYWD_OPBAS) - // showJmolMO(basis.getSelectedItem().toString(), - // orb2.getSelectedIndex() + 1); - // else - // showJmolMO(bas2.getSelectedItem().toString(), - // orb2.getSelectedIndex() + 1); - // } - // }); - // orb.setSelectedIndex(0); - // orb2.setSelectedIndex(0); - // } - // } - // } protected String[] getRSList() { String data = inputFileHandler.getInputFile("nbo"); Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -1017,15 +1017,27 @@ * @param sb * @param i */ - private void appendOrbitalSign(SB sb, int i) { - if (!orbitals.bsNeg.get(i)) + private void appendOrbitalPhaseSign(SB sb, int i) { + if (orbitals.bsNeg.get(i)) + sb.append("GLOBAL SIGN -1" + sep); + else sb.append("GLOBAL SIGN +1" + sep); - sb.append("GLOBAL SIGN +1" + sep); + +// SB sb1 = getMetaHeader(true); +// if (orbitals.bsNeg.get(i)) +// sb1.append("CMD SIGN -1" + sep); +// else +// sb1.append("CMD SIGN +1" + sep); +// postNBO_v(sb1, NBOService.MODE_RAW, null, "", null, null); + } //contour/profile selected orbital in orbital list protected void createImage1or2D(boolean oneD) { + if (jmolView) + setJmolView(true); + if (orbitals.bsOn.cardinality() > 1) { createImage1or2DMultiple(oneD); return; @@ -1037,7 +1049,7 @@ int ind = orbitals.bsOn.nextSetBit(0); - appendOrbitalSign(sb, ind); + appendOrbitalPhaseSign(sb, ind); appendLineParams(sb); if (oneD) { @@ -1045,11 +1057,11 @@ } else { appendPlaneParams(sb); } - appendOrbitalSign(sb, ind); + appendOrbitalPhaseSign(sb, ind); String msg = (oneD ? "Profile " : "Contour ") + (ind + 1); log(msg, 'I'); sb.append("CMD ").append(msg).append(sep); - appendOrbitalSign(sb, ind); + appendOrbitalPhaseSign(sb, ind); postNBO_v(sb, NBOService.MODE_IMAGE, null, (oneD ? "Profiling.." : "Contouring.."), null, null); @@ -1090,7 +1102,10 @@ } } - private void sendJmolOrientation() { + private void setJmolView(boolean is2D) { + + String key = (is2D ? "a U" : "a V_U"); + SB sb = new SB(); for (int i = 1; i <= 3; i++) { String tmp2 = ""; @@ -1099,10 +1114,12 @@ + j + "][" + i + "]", null); tmp2 += oi.toString() + " "; } - sb.append("a V_U" + i + " " + tmp2 + sep); + sb.append(key + i + " " + tmp2 + sep); } + postNBO_v(getMetaHeader(true).append("CMD LABEL"), NBOService.MODE_RAW, null, "", "jview.txt", sb.toString()); + postNBO_v(new SB().append("CMD JVIEW"), NBOService.MODE_RAW, null, - "Sending Jmol orientation", "jview.txt", sb.toString()); + "Sending Jmol orientation", null, null); // sb = getMetaHeader(true); // sb.append("CMD LABEL"); @@ -1123,12 +1140,12 @@ for (int pt = 0, i = orbitals.bsOn.nextSetBit(0); i >= 0; i = orbitals.bsOn .nextSetBit(i + 1)) { sb = getMetaHeader(true); - appendOrbitalSign(sb, i); + appendOrbitalPhaseSign(sb, i); if (oneD) sb.append("CMD PROFILE " + (i + 1) + sep); else sb.append("CMD CONTOUR " + (i + 1) + sep); - appendOrbitalSign(sb, i); + msg += " " + (i + 1); profileList += " " + (++pt); postNBO_v(sb, NBOService.MODE_RAW, null, "Sending " + msg, null, null); @@ -1147,9 +1164,8 @@ BS bs = orbitals.bsOn; for (int pt = 0, i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { sb = getMetaHeader(true); - appendOrbitalSign(sb, i); + appendOrbitalPhaseSign(sb, i); sb.append("CMD PROFILE " + (i + 1) + sep); - appendOrbitalSign(sb, i); postNBO_v(sb, NBOService.MODE_RAW, null, "Sending profile " + (i + 1), null, null); tmp += " " + (i + 1); @@ -1159,16 +1175,16 @@ String jviewData = sb.toString(); sb = getMetaHeader(false); appendCameraParams(sb); - if (jmolView) - sendJmolOrientation(); sb.append("CMD VIEW" + list); postNBO_v(sb, NBOService.MODE_IMAGE, null, "Raytracing...", null, jviewData); } private void initializeImage() { runScriptNow("image close"); - nboService.restartIfNecessary(); + nboService.restart(); setDefaultParameterArrays(); + if (jmolView) + setJmolView(false); } private int viewVectorPt = 0; Modified: trunk/Jmol/src/org/gennbo/NBOPlugin.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOPlugin.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/gennbo/NBOPlugin.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -25,6 +25,7 @@ import java.util.Map; +import javax.swing.ImageIcon; import javax.swing.JFrame; import org.jmol.c.CBK; @@ -39,7 +40,14 @@ public final static String version = "0.1.3"; + @Override + public boolean isStarted() { + return vwr != null; + } + + + @Override public void start(JFrame frame, Viewer vwr, Map<String, Object> jmolOptions) { this.vwr = vwr; if (getNBOProperty("serverPath", null) == null) { @@ -105,5 +113,17 @@ JmolPanel.setPluginOption("NBO", name, option.replace('\\', '/')); } + @Override + public ImageIcon getMenuIcon() { + return getIcon("nbo6logo20x20"); + } + @Override + public String getMenuText() { + return "NBO"; + } + + ImageIcon getIcon(String name) { + return new ImageIcon(this.getClass().getResource("assets/" + name + ".gif")); + } } Modified: trunk/Jmol/src/org/gennbo/NBORequest.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBORequest.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/gennbo/NBORequest.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -31,7 +31,8 @@ this.statusInfo = statusInfo; this.returnMethod = returnMethod; // need to flag this so that not all of sysout is returned - isRun = (statusInfo != null && statusInfo.indexOf("Running") >= 0); + isRun = (statusInfo != null + && (statusInfo.indexOf("Running") >= 0 || statusInfo.indexOf("Getting value") >= 0)); } /** Modified: trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/openscience/jmol/app/JmolPlugin.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -2,6 +2,7 @@ import java.util.Map; +import javax.swing.ImageIcon; import javax.swing.JFrame; import org.jmol.c.CBK; @@ -14,4 +15,8 @@ String getName(); void setVisible(boolean b); void notifyCallback(CBK type, Object[] data); + ImageIcon getMenuIcon(); + String getMenuText(); + boolean isStarted(); + } Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/GuiMap.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/GuiMap.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/GuiMap.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -185,7 +185,6 @@ labels.put("definecenter", GT._("Define &Center")); labels.put("tools", GT._("&Tools")); labels.put("gauss", GT._("&Gaussian...")); - labels.put("nbo", "&NBO..."); labels.put("viewMeasurementTable", GT._("&Measurements") + "..."); labels.put("distanceUnitsMenu", GT._("Distance &Units")); labels.put("distanceNanometersScript", GT._("&Nanometers 1E-9")); Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2017-01-31 23:38:01 UTC (rev 21373) @@ -49,9 +49,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Enumeration; import java.util.Hashtable; import java.util.List; import java.util.Map; +import java.util.PropertyResourceBundle; import java.util.Map.Entry; import java.util.Properties; @@ -202,7 +204,7 @@ private static final String surfaceToolActionProperty = "surfaceTool"; private static final String pasteClipboardActionProperty = "pasteClipboard"; private static final String gaussianAction = "gauss"; - private static final String nboAction = "nbo"; +// private static final String nboAction = "nbo"; private static final String resizeAction = "resize"; //private static final String saveasAction = "saveas"; @@ -844,8 +846,8 @@ private JMenuBar createMenubar() { JMenuBar mb = new JMenuBar(); addNormalMenuBar(mb); - // The Macros Menu - addMacrosMenuBar(mb); + addPluginMenu(mb); + addMacrosMenu(mb); // The Plugin Menu // if (pluginManager != null) { // mb.add(pluginManager.getMenu()); @@ -855,8 +857,59 @@ addHelpMenuBar(mb); return mb; } + JMenu pluginMenu; - private void addMacrosMenuBar(JMenuBar menuBar) { + private void addPluginMenu(JMenuBar mb) { + pluginMenu = new JMenu("Plugins"); + try { + PropertyResourceBundle bundle = new PropertyResourceBundle(getClass() + .getResourceAsStream( + "/org/openscience/jmol/app/plugins/plugin.properties")); + Enumeration<String> keys = bundle.getKeys(); + while (keys.hasMoreElements()) { + final String key = keys.nextElement(); + JmolPlugin p = plugins.get(key); + if (p != null) + continue; + String path = bundle.getString(key); + if (path == null | path.length() == 0) + continue; + try { + p = getAndRegisterPlugin(key, path); + if (p != null) { + String text = p.getMenuText(); + ImageIcon icon = p.getMenuIcon(); + if (text == null) + text = key; + JMenuItem item = new JMenuItem(text); + if (icon!= null) { + item.setHorizontalTextPosition(SwingConstants.RIGHT); + item.setIcon(icon); + } + pluginMenu.add(item); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + showPlugin(key, null, null); + } + + }); + } + } catch (Exception e) { + System.out.println("Cannot create plugin " + key + " " + path); + } + } + } catch (IOException ex) { + throw new RuntimeException(ex.toString()); + } + mb.add(pluginMenu); + } + + + + + private void addMacrosMenu(JMenuBar menuBar) { // ok, here needs to be added the funny stuff JMenu macroMenu = guimap.newJMenu("macros"); File macroDir = new File(System.getProperty("user.home") @@ -960,8 +1013,6 @@ String menuKey = ((JmolAbstractButton) e.getSource()).getKey(); if (menuKey.equals("display") || menuKey.equals("tools")) setMenuState(); - // if (menuKey.equals("nboMenu")) - // setMenuNBO((JMenu) e.getSource()); } @Override @@ -1023,7 +1074,7 @@ new RecentFilesAction(), povrayAction, writeAction, toWebAction, new ScriptWindowAction(), new ScriptEditorAction(), new AtomSetChooserAction(), viewMeasurementTableAction, - new GaussianAction(), new NBOAction(), new ResizeAction(), + new GaussianAction(), /*new NBOAction(),*/ new ResizeAction(), surfaceToolAction }; class CloseAction extends AbstractAction { @@ -1109,17 +1160,17 @@ } } - class NBOAction extends AbstractAction { - public NBOAction() { - super(nboAction); - } +// class NBOAction extends AbstractAction { +// public NBOAction() { +// super(nboAction); +// } +// +// @Override +// public void actionPerformed(ActionEvent arg0) { +// startNBO(null); +// } +// } - @Override - public void actionPerformed(ActionEvent arg0) { - startNBO(null); - } - } - class NewwinAction extends AbstractAction { NewwinAction() { @@ -1164,7 +1215,7 @@ // nodes[3].setEnabled(true); // view // nodes[4].setEnabled(true); // search } - + /** * @param jmolOptions * e.g. NOZAP;VIEWER unused @@ -1174,14 +1225,11 @@ showPlugin("NBO", "org.gennbo.NBOPlugin", jmolOptions); } - private void showPlugin(String name, String path, Map<String, Object> jmolOptions) { + void showPlugin(String name, String path, Map<String, Object> jmolOptions) { try { - JmolPlugin p = plugins.get(name); - if (p == null) { - plugins.put(name, - p = (JmolPlugin) Interface.getInterface(path, vwr, "plugin")); + JmolPlugin p = getAndRegisterPlugin(name, path); + if (!p.isStarted()) p.start(frame, vwr, jmolOptions); - } p.setVisible(true); } catch (Throwable e) { System.out.println("Error creating plugin " + name); @@ -1189,6 +1237,15 @@ } } + private JmolPlugin getAndRegisterPlugin(String name, String path) { + JmolPlugin p = plugins.get(name); + if (p == null) { + plugins.put(name, + p = (JmolPlugin) Interface.getInterface(path, vwr, "plugin")); + } + return p; + } + public static Object getInstanceWithParams(String name, Class<?>[] classes, Object... params) { try { Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties 2017-01-31 13:51:45 UTC (rev 21372) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/Properties/Jmol-resources.properties 2017-01-31 23:38:01 UTC (rev 21373) @@ -166,7 +166,7 @@ # #tools=viewMeasurementTable animate vibrate graph chemicalShifts crystprop tools=viewMeasurementTable distanceUnitsMenu animateMenu vibrateMenu atomsetchooser \ - surfaceTool gauss nbo spectrumMenu + surfaceTool gauss spectrumMenu viewMeasurementTableImage=rulerButton.gif distanceUnitsMenuImage=distanceUnitsButton.png animateMenuImage=animateButton.png @@ -176,15 +176,6 @@ #graphImage=graphButton.gif #crystpropImage=crystalButton.gif -# -# NBO Menu -# -nboMenu=nboConfigScript nboModelScript nboRunScript nboViewScript nboSearchScript -nboConfigScript=sync on; sync . "NBO:Config" -nboModelScript=sync on; sync . "NBO:Model" -nboRunScript=sync on; sync . "NBO:Run" -nboViewScript=sync on; sync . "NBO:View" -nboSearchScript=sync on; sync . "NBO:Search" # # Spectrum Menu Added: trunk/Jmol/src/org/openscience/jmol/app/plugins/plugin.properties =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/plugins/plugin.properties (rev 0) +++ trunk/Jmol/src/org/openscience/jmol/app/plugins/plugin.properties 2017-01-31 23:38:01 UTC (rev 21373) @@ -0,0 +1,3 @@ +# plugin.properties + +NBO=org.gennbo.NBOPlugin Property changes on: trunk/Jmol/src/org/openscience/jmol/app/plugins/plugin.properties ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-02-03 17:20:13
|
Revision: 21385 http://sourceforge.net/p/jmol/code/21385 Author: hansonr Date: 2017-02-03 17:20:10 +0000 (Fri, 03 Feb 2017) Log Message: ----------- adds capability to drag-drop from URLs in a browser into Jmol application NBO better file handling; allows user to use Jmol's File..Open menu item in E Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/gennbo/NBODialogRun.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBOFileHandler.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java trunk/Jmol/src/org/jmol/awt/FileDropper.java Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-02-03 15:09:30 UTC (rev 21384) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-02-03 17:20:10 UTC (rev 21385) @@ -44,6 +44,7 @@ import java.util.Map; import javajs.swing.SwingConstants; +import javajs.util.PT; import javax.swing.BorderFactory; import javax.swing.Box; @@ -709,6 +710,35 @@ case LOADSTRUCT: if (vwr.ms.ac == 0) return; + String f = runScriptNow("print _modelFile"); + if (!f.equals("null") && !iAmLoading) { + if (!f.endsWith(".47")) { + if (dialogMode != DIALOG_MODEL) { + openPanel(DIALOG_MODEL); + return; + } + } + if (dialogMode == DIALOG_MODEL) { + notFromNBO = true; + } else { + if (dialogMode != DIALOG_RUN) { + openPanel(DIALOG_RUN); + return; + } + if (f.startsWith("http")) { + retrieveFile(f, null); + return; + } + if (f.startsWith("file:")) + f = PT.trim(f.substring(5), "/"); + if (!f.contains(":")) + f = "/" + f; + inputFileHandler.loadSelectedFile(new File(f)); + return; + } + } + + iAmLoading = false; if (nboView) runScriptNow("select add visible.bonds;color bonds lightgrey;" + "wireframe 0.1;select none"); @@ -794,7 +824,8 @@ // return c; // } - void setStatus(String statusInfo) { + @Override + protected void setStatus(String statusInfo) { boolean isBusy = (statusInfo != null && statusInfo.length() > 0); statusLab.setText(statusInfo); centerPanel.setCursor(Cursor Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-03 15:09:30 UTC (rev 21384) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-03 17:20:10 UTC (rev 21385) @@ -9,7 +9,7 @@ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either + * License as published by the Free Software Foundation; either" * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, @@ -72,6 +72,8 @@ abstract class NBODialogConfig extends JDialog { + abstract protected void setStatus(String statusInfo); + abstract protected void updatePanelSettings(); abstract protected NBOFileHandler newNBOFileHandler(String name, String ext, @@ -115,7 +117,7 @@ protected static final String sep = System.getProperty("line.separator"); protected final static String JMOL_FONT_SCRIPT = - ";set fontscaling true; select _H; font label 10 arial; set labelscalereference 0.025;select !_H;font label 10 arial;set labelscalereference 0.035;select none;"; + ";set fontscaling true; select _H; font label 10 arial plain 0.025;select !_H;font label 10 arial plain 0.035;select none;"; /** @@ -483,7 +485,7 @@ "org/gennbo/assets/atomColors.txt"); runScriptNow(atomColors + ";refresh"); } catch (IOException e) { - log("atomColors.txt not found", 'r'); + logError("atomColors.txt not found"); } nboView = true; } @@ -759,6 +761,7 @@ if (chFormat == 'r') { format0 = "b style=color:red"; format1 = "b"; + setStatus(""); } if (!format0.equals("p")) @@ -779,7 +782,7 @@ protected void alertError(String line) { line = PT.rep(line.replace('\r', ' '), "\n\n", "\n"); - log(line, 'r'); + logError(line); vwr.alert(line); } @@ -804,13 +807,19 @@ return PT.trim(vwr.runScript(script), "\n"); } + protected boolean iAmLoading; protected void loadModelFileQueued(File f, boolean saveOrientation) { + iAmLoading = true; String s = "load \"" + f.getAbsolutePath() + "\"" + JMOL_FONT_SCRIPT ; if (saveOrientation) s = "save orientation o1;" + s + ";restore orientation o1"; runScriptQueued(s); } + protected String loadModelFileNow(String s) { + iAmLoading = true; + return runScriptNow("load " + s); + } private boolean connect() { if (!nboService.haveGenNBO()) @@ -956,5 +965,4 @@ "47"); } - } Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-03 15:09:30 UTC (rev 21384) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-03 17:20:10 UTC (rev 21385) @@ -129,7 +129,7 @@ /** * A model is being loaded into Jmol that NBO does not know about yet */ - private boolean notFromNBO; + protected boolean notFromNBO; protected String selected = ""; @@ -858,16 +858,15 @@ } jtLineFormula.setText(""); saveFileHandler.setInput(null, model, "mol"); - s = "set zoomlarge false;load " + model; logCmd("get " + model); - if (runScriptNow(s) == null) { + if (loadModelFileNow(model) == null) { model = (model.charAt(0) == ':' ? "$" : ":") + model.substring(1); if (model.startsWith("$=")) { logError("RCSB does not recognize ligand code " + model.substring(2) + "."); return; } logCmd("get " + model); - if (runScriptNow("load :" + model) == null) { + if (loadModelFileNow(model) == null) { logError("Neither NIH/CIR nor PubChem have recognize this identifier."); notFromNBO = false; } Modified: trunk/Jmol/src/org/gennbo/NBODialogRun.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-02-03 15:09:30 UTC (rev 21384) +++ trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-02-03 17:20:10 UTC (rev 21385) @@ -663,70 +663,24 @@ } repaint(); } else if (e.getSource() == download) { - downloadNBOArchiveFile(); - } - } - - /** - * Get an NBO archive .47 file. - * - */ - public void downloadNBOArchiveFile() { - File f = null; - String path = tfPath.getText().trim(); - logInfo("saving to " + path, Logger.LEVEL_INFO); - - int n = 0; - for (int i = 0; i < jcLinks.length; i++) { - if (!jcLinks[i].isSelected()) - continue; - if (path.endsWith("/") || path.endsWith("\\")) - path += jcLinks[i].getText(); - else - path += "/" + jcLinks[i].getText(); - f = new File(path); - if (f.exists()) { - int j = JOptionPane - .showConfirmDialog( - null, - "File " - + f.getAbsolutePath() - + " already exists, do you want to overwrite contents, along with its associated .nn and .nbo files?", - "Warning", JOptionPane.YES_NO_OPTION); - if (j == JOptionPane.NO_OPTION) - return; + String s = null; + for (int i = 0; i < jcLinks.length; i++) { + if (!jcLinks[i].isSelected()) + continue; + s = baseDir + jcLinks[i].getText(); + break; } - String s = baseDir + jcLinks[i].getText(); - logCmd("retrieve " + s); - - try { - String fileData = vwr.getAsciiFileOrNull(s); - if (fileData == null) { - logError("Error reading " + s); - break; - } - if (inputFileHandler.writeToFile(path, fileData)) { - logInfo(f.getName() + " (" + fileData.length() + " bytes)", - Logger.LEVEL_INFO); - n++; - } else { - logError("Error writing to " + f); - } - } catch (Throwable e) { - alertError("Error reading " + s + ": " + e); + if (s == null) + return; + setVisible(false); + if (!retrieveFile(s, tfPath.getText())) { + setVisible(true); + return; } - break; + dispose(); } - if (f == null) - return; - modelOrigin = ORIGIN_NBO_ARCHIVE; - inputFileHandler.setInputFile(f); - modelOrigin = ORIGIN_NBO_ARCHIVE; - rbLocal.doClick(); - modelOrigin = ORIGIN_FILE_INPUT; - setVisible(false); - dispose(); } + } /** @@ -775,6 +729,59 @@ } /** + * get a resource and put it in the specified path + * + * @param s + * @param path + * @return true if successful + */ + public boolean retrieveFile(String s, String path) { + File f = null; + if (path == null) + path = inputFileHandler.fileDir; + logCmd("retrieve " + s); + + String name = s.substring(s.lastIndexOf("/") + 1); + if (path.endsWith("/") || path.endsWith("\\")) + path += name; + else + path += (path.endsWith("\\") ? "\\" : "/") + name; + f = new File(path); + if (f.exists()) { + int j = JOptionPane + .showConfirmDialog( + null, + "File " + + f.getAbsolutePath() + + " already exists, do you want to overwrite contents, along with its associated .nn and .nbo files?", + "Warning", JOptionPane.YES_NO_OPTION); + if (j == JOptionPane.NO_OPTION) + return false; + } + try { + String fileData = vwr.getAsciiFileOrNull(s); + if (fileData == null) { + logError("Error reading " + s); + return false; + } + if (inputFileHandler.writeToFile(path, fileData)) { + logInfo(f.getName() + " (" + fileData.length() + " bytes)", + Logger.LEVEL_INFO); + } else { + logError("Error writing to " + f); + } + } catch (Throwable e) { + alertError("Error reading " + s + ": " + e); + } + modelOrigin = ORIGIN_NBO_ARCHIVE; + inputFileHandler.setInputFile(f); + modelOrigin = ORIGIN_NBO_ARCHIVE; + rbLocal.doClick(); + modelOrigin = ORIGIN_FILE_INPUT; + return true; + } + + /** * Initiates a gennbo job via NBOServe; called from RUN, VIEW, and SEARCH * * Note that there are issues with this method. Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-03 15:09:30 UTC (rev 21384) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-03 17:20:10 UTC (rev 21385) @@ -714,7 +714,7 @@ } private void load(int nn, boolean withBondPicking) { - runScriptNow("load " + inputFileHandler.newNBOFileForExt("" + nn) + (withBondPicking ? ";set bondpicking true" : "")); + loadModelFileNow(inputFileHandler.newNBOFileForExt("" + nn) + (withBondPicking ? ";set bondpicking true" : "")); } protected void setKeyword(final String[] get, final String[] labs) { @@ -894,8 +894,7 @@ list1.removeAllElements(); getListSearch("r", list1); } else if (keyProp.equals("OPBAS")) { - runScriptNow("load " - + inputFileHandler.newNBOFileForExt("" + loadModelFileNow("" + inputFileHandler.newNBOFileForExt("" + (31 + comboBasis.getSelectedIndex()))); list1.removeAllElements(); list2.removeAllElements(); Modified: trunk/Jmol/src/org/gennbo/NBOFileHandler.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOFileHandler.java 2017-02-03 15:09:30 UTC (rev 21384) +++ trunk/Jmol/src/org/gennbo/NBOFileHandler.java 2017-02-03 17:20:10 UTC (rev 21385) @@ -155,7 +155,7 @@ return true; } - private boolean loadSelectedFile(File selectedFile) { + protected boolean loadSelectedFile(File selectedFile) { dialog.nboService.restartIfNecessary(); inputFile = selectedFile; //if(!useExt.equals("47")&&!useExt.equals("31")&&!useExt.equals("nbo")) Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2017-02-03 15:09:30 UTC (rev 21384) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2017-02-03 17:20:10 UTC (rev 21385) @@ -161,6 +161,8 @@ } boolean isMO = !nboType.equals("AO"); nOrbitals = orbitals.size(); + if (nOrbitals == 0) + return; line = null; if (!isMO) nOrbitals = nOrbitals0 + nAOs; @@ -234,7 +236,7 @@ fileName += ext; String data = vwr.getFileAsString3(fileName, false, null); Logger.info(data.length() + " bytes read from " + fileName); - if (data.length() == 0 || data.indexOf("java.io.FileNotFound") >= 0) + if (data.length() == 0 || data.indexOf("java.io.FileNotFound") >= 0 && nboType != "AO") throw new Exception(" supplemental file " + fileName + " was not found"); return data; } Modified: trunk/Jmol/src/org/jmol/awt/FileDropper.java =================================================================== --- trunk/Jmol/src/org/jmol/awt/FileDropper.java 2017-02-03 15:09:30 UTC (rev 21384) +++ trunk/Jmol/src/org/jmol/awt/FileDropper.java 2017-02-03 17:20:10 UTC (rev 21385) @@ -92,6 +92,19 @@ } private void loadFile(String fname, int x, int y) { + if (fname.endsWith(".URL")) { +// [InternetShortcut] +// URL=http://nbo6.chem.wisc.edu/jmol_nborxiv/allyl.47 +// IDList= +// HotKey=0 +// IconFile=C:\Users\RM\AppData\Local\Mozilla\Firefox\Profiles\r4gp03t7.default\shortcutCache\x76TB2sbngvxLh95XTl2MA==.ico +// IconIndex=0 + String data = vwr.getAsciiFileOrNull(fname); + if (data == null || data.indexOf("URL=") < 0) + return; + fname = data.substring(data.indexOf("URL=") + 4); + fname = fname.substring(0, fname.indexOf("\n")); + } fname = fname.replace('\\', '/').trim(); if (fname.indexOf("://") < 0) fname = (fname.startsWith("/") ? "file://" : "file:///") + fname; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-02-03 23:58:21
|
Revision: 21386 http://sourceforge.net/p/jmol/code/21386 Author: hansonr Date: 2017-02-03 23:58:18 +0000 (Fri, 03 Feb 2017) Log Message: ----------- NBO improvements Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/gennbo/NBODialogRun.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOService.java trunk/Jmol/src/org/jmol/shape/Measures.java Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-03 17:20:10 UTC (rev 21385) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-03 23:58:18 UTC (rev 21386) @@ -117,7 +117,10 @@ protected static final String sep = System.getProperty("line.separator"); protected final static String JMOL_FONT_SCRIPT = - ";set fontscaling true; select _H; font label 10 arial plain 0.025;select !_H;font label 10 arial plain 0.035;select none;"; + ";set fontscaling true; " + + "select _H; font label 10 arial plain 0.025;" + + "select !_H;font label 10 arial bold 0.025;" + + "select none;"; /** @@ -413,7 +416,7 @@ jCheckNboView = new JCheckBox("Emulate NBO View"); jCheckNboView.setSelected(true); - settingsBox.add(jCheckNboView); +// settingsBox.add(jCheckNboView); jCheckNboView.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-03 17:20:10 UTC (rev 21385) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-03 23:58:18 UTC (rev 21386) @@ -23,6 +23,7 @@ */ package org.gennbo; +import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; @@ -54,11 +55,13 @@ import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; +import javax.swing.SwingConstants; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.filechooser.FileNameExtensionFilter; import org.jmol.i18n.GT; +import org.jmol.java.BS; import org.jmol.util.Elements; abstract class NBODialogModel extends NBODialogConfig { @@ -109,7 +112,7 @@ /// private static final String LOAD_SCRIPT = ";set zoomlarge false;zoomTo 0.5 {*} 0;"; - protected String editActionName; + protected String actionIDName; private Box innerEditBox; private JTextField jtNIHInput, jtLineFormula; private JComboBox<String> jcSymOps; @@ -122,8 +125,8 @@ Stack<String> undoStack, redoStack; protected JTextField currVal; - protected JTextField[] atomNumBox; - protected JLabel valLab = new JLabel(""); + protected JTextField[] atomNumBoxes; + protected JLabel valueLabel = new JLabel(""); protected JPanel panel; /** @@ -131,12 +134,10 @@ */ protected boolean notFromNBO; - protected String selected = ""; - private JButton rebond; private JLabel atomsLabel; - protected int editAction; + protected int actionID; private Box editComponent; private Box inputHeader; private Box saveHeader; @@ -370,14 +371,14 @@ innerEditBox.setVisible(false); Box atBox = Box.createHorizontalBox(); atBox.add(atomsLabel = new JLabel("")); // "Atoms:" - atomNumBox = new JTextField[4]; + atomNumBoxes = new JTextField[4]; for (int i = 0; i < 4; i++) { - atomNumBox[i] = new JTextField(); - atomNumBox[i].setFont(userInputFont); - atomNumBox[i].setMaximumSize(new Dimension(50, 50)); - atBox.add(atomNumBox[i]).setVisible(false); + atomNumBoxes[i] = new JTextField(); + atomNumBoxes[i].setFont(userInputFont); + atomNumBoxes[i].setMaximumSize(new Dimension(50, 50)); + atBox.add(atomNumBoxes[i]).setVisible(false); final int num = i; - atomNumBox[i].addKeyListener(new KeyListener(){ + atomNumBoxes[i].addKeyListener(new KeyListener(){ @Override public void keyTyped(KeyEvent e) {} @@ -392,7 +393,7 @@ } }); - atomNumBox[i].addFocusListener(new FocusListener() { + atomNumBoxes[i].addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent arg0) { if (num == boxCount - 1) { @@ -402,26 +403,20 @@ @Override public void focusLost(FocusEvent arg0) { - int atnum = Integer.MAX_VALUE; - try { - atnum = Integer.parseInt(atomNumBox[num].getText()); - } catch (Exception e) { + int atnum = PT.parseInt(atomNumBoxes[num].getText()); + if (atnum > vwr.ms.ac || atnum < 1) { + System.out.println("num is " + num + " v=" + + atomNumBoxes[num].getText()); + atomNumBoxes[num].setText(""); + } else { + setAtomBoxesFromSelection(null); } - if (atnum > vwr.ms.ac) { - atomNumBox[num].setText(""); - } - selected = modelEditGetSelected(); - getValue(); - showSelected(PT.getTokens(selected)); - editValueTf.setText(""); - editValueTf.setEnabled(selected.length() > 0); } }); - atomNumBox[i].addActionListener(new ActionListener() { + atomNumBoxes[i].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - selected = modelEditGetSelected(); - applyEdit(); + setAtomBoxesFromSelection(null); } }); } @@ -430,7 +425,6 @@ Box box = Box.createHorizontalBox(); box.add(new JLabel("Symmetry Type: ")); - jcSymOps = new JComboBox<String>(); jcSymOps.addItem("<Select Transition Metal>"); jcSymOps.setMaximumSize(new Dimension(180, 40)); @@ -438,14 +432,20 @@ box.add(jcSymOps); box.setVisible(false); innerEditBox.add(box); - currVal = new JTextField(); + + currVal = new JTextField("pick atoms..."); currVal.setFont(titleFont); - currVal.setMaximumSize(new Dimension(200, 40)); - currVal.setEditable(false); + currVal.setBackground(new Color(220,220,220)); + currVal.setMinimumSize(new Dimension(250, 40)); + currVal.setPreferredSize(new Dimension(250, 40)); + currVal.setMaximumSize(new Dimension(250, 40)); +// currVal.setEditable(false); + currVal.setHorizontalAlignment(SwingConstants.CENTER); innerEditBox.add(currVal).setVisible(false); - valLab = new JLabel(); - valLab.setAlignmentX(0.5f); - innerEditBox.add(valLab).setVisible(false); + + valueLabel = new JLabel(); + valueLabel.setAlignmentX(0.5f); + innerEditBox.add(valueLabel).setVisible(false); editValueTf = new JTextField("Select atoms..."); editValueTf.setVisible(false); @@ -453,7 +453,7 @@ editValueTf.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - applyEdit(); + postActionToNBO_m(actionID); } }); editValueTf.getDocument().addDocumentListener(new DocumentListener() { @@ -474,40 +474,118 @@ jbApply.setEnabled(false); } }); - innerEditBox.add(editValueTf).setVisible(false); + + Box lowBox = Box.createHorizontalBox(); jbClear = new JButton("Clear Selected"); jbClear.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - clearSelected(); + clearSelected(true); } }); jbApply = new JButton("Apply"); jbApply.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - applyEdit(); + postActionToNBO_m(actionID); } }); - Box lowBox = Box.createHorizontalBox(); lowBox.add(jbClear).setVisible(false); lowBox.add(jbApply).setVisible(false); innerEditBox.add(lowBox); } + protected void updateSelected(boolean doPost) { + String selected = modelEditGetSelected(); + String script = "measure delete;"; + int cnt = selected.split(" ").length; + editValueTf.setEnabled(cnt > 0); + editValueTf.setText(""); + editValueTf.requestFocus(); + switch (boxCount) { + case BOX_COUNT_4: + String desc = ""; + if (cnt > 1) + script += "measure " + selected + " \" \";"; + switch (cnt) { + case 0: + currVal.setText("pick atoms..."); + break; + case 1: + desc = (actionID == MODEL_ACTION_ALTER ? "atomic number or symbol" + : "atomic number"); + break; + case 2: + desc = "distance"; + break; + case 3: + case 4: + desc = (cnt == 3 ? "angle" : "dihedral angle"); + break; + } + valueLabel.setText("(" + desc + ")"); + valueLabel.setVisible(cnt > 0); + break; + case BOX_COUNT_2: + if (cnt == 2) { + jbApply.setEnabled(true); + if (editValueTf.isVisible()) + editValueTf.requestFocus(); + else + atomNumBoxes[1].requestFocus(); + } + break; + case BOX_COUNT_1: + if (cnt == 1) { + if (actionID == MODEL_ACTION_REBOND) { + jcSymOps.removeAllItems(); + jcSymOps.setEnabled(true); + int atomInd = Integer.parseInt(atomNumBoxes[0].getText()) - 1; + int val = vwr.ms.at[atomInd].getValence(); + jbApply.setEnabled(true); + switch (val) { + case 4: + for (String x : new String[] { "td", "c3vi", "c4v" }) + jcSymOps.addItem(x); + break; + case 5: + for (String x : new String[] { "c4vo", "c4vi" }) + jcSymOps.addItem(x); + break; + case 6: + for (String x : new String[] { "c3vo", "c3vi", "c5vo", "c5vi" }) + jcSymOps.addItem(x); + break; + default: + jcSymOps.addItem("<Select Transition Metal>"); + jcSymOps.setEnabled(false); + jbApply.setEnabled(false); + } + } + } + } + if (actionID == MODEL_ACTION_ALTER) { + postActionToNBO_m(MODEL_ACTION_VALUE); + } + runScriptQueued(script); + editValueTf.setText(""); + editValueTf.setEnabled(selected.length() > 0); + showSelected(selected); + if (actionID == MODEL_ACTION_VALUE || doPost) + postActionToNBO_m(actionID); + } + protected String modelEditGetSelected() { String s = ""; for (int j = 0; j < boxCount; j++) - s += atomNumBox[j].getText() + " "; - s = PT.rep(s.trim(), " ", " "); - return s.trim(); + s += atomNumBoxes[j].getText().trim() + " "; + return PT.rep(s.trim(), " ", " ").trim(); } private Box getSaveComponent() { - Box sBox = createBorderBox(true); final String[] SAVE_OPTIONS = { "<Select File Type>", "XYZ [.xyz]", @@ -626,18 +704,19 @@ * @param s * - array containing atomnums */ - protected void showSelected(String[] s) { - String sel = ""; - for (String x : s) - sel += " " + (Integer.parseInt(x) - 1); - runScriptNow("select on ({" + sel + " })"); + protected void showSelected(String s) { + BS bs = new BS(); + for (String x : PT.getTokens(s)) + bs.set((Integer.parseInt(x) - 1)); + String script = "select on " + bs + ";"; + runScriptQueued(script); } private void createInput(final JTextField field, JRadioButton radio) { field.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - getModelFromTextBox(field); + loadtModelFromTextBox(field); } }); addFocusListeners(field, radio); @@ -673,10 +752,9 @@ * @param action */ protected void actionSelected(int action) { - editActionName = MODEL_ACTIONS[action].toLowerCase(); - editAction = action; - runScriptNow("set refreshing true"); // just in case - clearSelected(); + actionID = action; + runScriptQueued("set refreshing true; measurements delete"); // just in case + clearSelected(true); switch (action) { case MODEL_ACTION_MUTATE: boxCount = BOX_COUNT_1; @@ -708,12 +786,12 @@ label = "Select atom" + (boxCount > 1 ? "s" : "") + "..."; jbApply.setEnabled(false); for (int i = 0; i < 4; i++) - atomNumBox[i].setVisible(i < boxCount); + atomNumBoxes[i].setVisible(i < boxCount); atomsLabel.setText(boxCount == 0 ? "" : "Atom" + (boxCount > 1 ? "s" : "") + ":"); editValueTf.setText(label); editValueTf.setEnabled(false); - jcSymOps.getParent().setVisible(editAction == MODEL_ACTION_REBOND); - switch (editAction) { + jcSymOps.getParent().setVisible(actionID == MODEL_ACTION_REBOND); + switch (actionID) { case MODEL_ACTION_ALTER: case MODEL_ACTION_MUTATE: case MODEL_ACTION_TWIST: @@ -725,10 +803,10 @@ } currVal.setVisible(boxCount == BOX_COUNT_4); - valLab.setVisible(editAction == MODEL_ACTION_ALTER); + valueLabel.setVisible(true);//actionID == MODEL_ACTION_ALTER); - jbApply.setVisible(editAction != MODEL_ACTION_VALUE); - jbClear.setVisible(editAction != MODEL_ACTION_VALUE); + jbApply.setVisible(actionID != MODEL_ACTION_VALUE); + jbClear.setVisible(true); innerEditBox.repaint(); innerEditBox.revalidate(); } @@ -761,58 +839,71 @@ logCmd("Undo"); } }; + private boolean resetOnAtomClick; /** * Clear out the text fields + * @param andShow TODO * */ - protected void clearSelected() { - for (int i = 0; i < boxCount; i++) - atomNumBox[i].setText(""); + protected void clearSelected(boolean andShow) { + for (int i = 0; i < boxCount; i++) { + System.out.println("clearing all boxes"); + atomNumBoxes[i].setText(""); + } + if (currVal != null) currVal.setText(""); - if (valLab != null) - valLab.setText(" "); - runScriptNow("measure off;select none;refresh"); - selected = ""; + if (valueLabel != null) + valueLabel.setText(" "); if (editValueTf != null) { editValueTf.setText("Select atoms..."); editValueTf.setEnabled(false); jbApply.setEnabled(false); } + if (andShow) + updateSelected(false); } /** * Apply the selected edit action to a model. * + * @param actionID + * */ - protected void applyEdit() { + protected void postActionToNBO_m(int actionID) { SB sb = new SB(); - - String cmd = editActionName + " " + selected + " "; - String val = editValueTf.getText(); - if (editAction == MODEL_ACTION_ALTER && PT.parseInt(val) == Integer.MIN_VALUE) + String selected = modelEditGetSelected(); + String cmd = MODEL_ACTIONS[actionID].toLowerCase() + " " + selected + " "; + String val = editValueTf.getText().trim(); + if (actionID == MODEL_ACTION_ALTER && PT.parseInt(val) == Integer.MIN_VALUE) { + if (val.length() == 0) + return; val = "" + Elements.elementNumberFromSymbol(val, true); - if (boxCount == BOX_COUNT_4 || boxCount == BOX_COUNT_1) - cmd += val; - else if (editAction == MODEL_ACTION_3CHB) { - if (!val.startsWith(":")) - cmd += ":"; - cmd += val; - } - if (editAction == MODEL_ACTION_REBOND) + } + if (boxCount == BOX_COUNT_4 || boxCount == BOX_COUNT_1) + cmd += val; + else if (actionID == MODEL_ACTION_3CHB) { + if (!val.startsWith(":")) + cmd += ":"; + cmd += val; + } + if (actionID == MODEL_ACTION_REBOND) cmd += jcSymOps.getSelectedItem().toString(); runScriptNow("save orientation o2"); sb.append("CMD " + cmd); logCmd(cmd); jbApply.setEnabled(false); + + if (actionID == MODEL_ACTION_VALUE) { + postNBO_m(sb, NBOService.MODE_MODEL_VALUE, "Checking Value", null, null); + } else { + postNBO_m(sb, + (actionID == MODEL_ACTION_ALTER ? NBOService.MODE_MODEL_ALTER + : NBOService.MODE_MODEL_EDIT), "Editing model", null, null); + resetOnAtomClick = true; + } - if (editAction == MODEL_ACTION_VALUE) - postNBO_m(sb, NBOService.MODE_MODEL_VALUE, "Checking Value", null, null); - else - postNBO_m(sb, (editAction == MODEL_ACTION_ALTER ? - NBOService.MODE_MODEL_ALTER : NBOService.MODE_MODEL_EDIT), "Editing model", null, null); - } /** @@ -829,14 +920,14 @@ * * @param textBox */ - protected void getModelFromTextBox(JTextField textBox) { + protected void loadtModelFromTextBox(JTextField textBox) { String model = textBox.getText().trim(); if (model.length() == 0) return; String s = ""; inputFileHandler.setInput(null, "", ""); saveFileHandler.setInput(null, "", ""); - clearSelected(); + clearSelected(false); if (textBox == jtNIHInput) { modelOrigin = ORIGIN_NIH; notFromNBO = true; @@ -936,7 +1027,7 @@ sb.append("GLOBAL C_FNAME " + fname + sep); sb.append("GLOBAL C_IN_EXT " + ext.toLowerCase() + sep); sb.append("CMD use"); - clearSelected(); + clearSelected(false); logCmd("use." + ess + " " + fname + "." + ext); postNBO_m(sb, NBOService.MODE_MODEL_NEW, "Loading model from NBO...", null, null); @@ -999,18 +1090,25 @@ /** * callback notification from Jmol - * @param atomno Jmol's atom number - 1-based * + * @param atomno + * Jmol's atom number - 1-based + * */ protected void notifyPick_m(String atomno) { - + runScriptNow("measure delete;" + (resetOnAtomClick ? "select none" : "")); + if (resetOnAtomClick) { + clearSelected(false); + } + resetOnAtomClick = false; if (boxCount == 0) return; String[] tok = atomno.split(","); + String selected = " " + modelEditGetSelected() + " "; if (tok.length > 1) { //Bond selection if (boxCount == BOX_COUNT_2) - clearSelected(); + clearSelected(true); String[] tok2 = tok[1].split(" "); String at1 = tok2[2].replaceAll("[\\D]", ""); if (!selected.contains(" " + at1 + " ")) @@ -1020,171 +1118,37 @@ notifyPick_m(at2); return; } - editValueTf.requestFocus(); - editValueTf.setText(""); - if (boxCount < 3) - editValueTf.setEnabled(true); - boolean isSelected = (vwr.evaluateExpressionAsVariable("{*}[" + atomno + "].selected") - .asFloat() == 1); + boolean isSelected = (vwr.evaluateExpressionAsVariable( + "{*}[" + atomno + "].selected").asFloat() == 1); if (isSelected) { - selected = (" " + selected).replace(" " + atomno + " ", " ").trim(); - if (selected.length() > 0) - selected += " "; - runScriptNow("select remove {*}[" + atomno + "];measure off;"); - String[] split = selected.split(" "); - for (int i = 0; i < atomNumBox.length; i++) - atomNumBox[i].setText(i >= split.length ? "" : " " + split[i]); + selected = PT.rep(selected, " " + atomno + " ", " ").trim(); } else { - selected += atomno + " "; - } - - // System.out.println(atomno + " / " + selected); - selected = PT.rep(selected, " ", " ").trim(); - int cnt = (selected.equals("") ? 1 : PT.getTokens(selected).length); - if (selected.length() > 0) - selected += " "; - switch (boxCount) { - case BOX_COUNT_4: - String desc = "atomic number or symbol"; - String script = null; - switch (cnt) { - case 0: - desc = ""; - script = ""; - break; - case 5: - clearSelected(); - selected += atomno + " "; - cnt = 1; - //$FALL-THROUGH$ - case 1: - editValueTf.setText(""); - script = "print {*}[" + atomno + "].elemno"; - editValueTf.setEnabled(true); - break; - case 2: - desc = "distance"; - runScriptNow("measure off;measure " + selected - + "\"2:%0.4VALUE //A\"" + ";measure " + selected - + "\"2:%0.4VALUE //A\""); - break; - case 3: - case 4: - desc = (cnt == 3 ? "angle" : "dihedral angle"); - runScriptNow("measure off;measure " + selected); - break; + if (PT.getTokens(selected).length >= boxCount) { + clearSelected(true); + selected = ""; } - String sval = ""; - if (script == null) { - script = "print measure("; - String[] tokens = PT.getTokens(selected); - for (String x : tokens) - script += "{*}[" + x + "] "; - String s = runScriptNow(script + ")"); - try { - String[] s2 = PT.getTokens("" + s); - if (s2.length < 2) - System.out.println(script); - s = s2[1]; - double val = Double.parseDouble(s); - val = round(val, 2); - sval = "" + val; - } catch (Exception e) { - System.out.println("TESTERROR1"); - } - } else { - sval = "" + runScriptNow(script); - } - currVal.setText("current value: " + sval); - String s = "(" + desc + ")";//editAction.equals("value") ? desc : "new " + desc; - valLab.setText(s);// + ":"); - valLab.setVisible(true); - //log(sval, 'b'); - break; - case BOX_COUNT_2: - if (cnt == 2) { - jbApply.setEnabled(true); - if (editValueTf.isVisible()) - editValueTf.requestFocus(); - else - atomNumBox[1].requestFocus(); - } else if (cnt == 3) { - clearSelected(); - selected += atomno + " "; - cnt = 1; - } - break; - case BOX_COUNT_1: - if (cnt == 2) { - clearSelected(); - selected += atomno + " "; - cnt = 1; - } - if (cnt == 1) { - if (editAction == MODEL_ACTION_REBOND) { - jcSymOps.removeAllItems(); - jcSymOps.setEnabled(true); - int atomInd = Integer.parseInt(atomno) - 1; - int val = vwr.ms.at[atomInd].getValence(); - jbApply.setEnabled(true); - switch (val) { - case 4: - for (String x : new String[] { "td", "c3vi", "c4v" }) - jcSymOps.addItem(x); - break; - case 5: - for (String x : new String[] { "c4vo", "c4vi" }) - jcSymOps.addItem(x); - break; - case 6: - for (String x : new String[] { "c3vo", "c3vi", "c5vo", "c5vi" }) - jcSymOps.addItem(x); - break; - default: - jcSymOps.addItem("<Select Transition Metal>"); - jcSymOps.setEnabled(false); - jbApply.setEnabled(false); - } - } - editValueTf.setEnabled(true); - editValueTf.setText(""); - editValueTf.requestFocus(); - } + selected += " " + atomno; } - if (cnt == 0 || isSelected) - return; - runScriptNow("select add {*}[" + atomno + "]"); - atomNumBox[cnt - 1].setText(" " + atomno); - + setAtomBoxesFromSelection(selected); } - protected void getValue() { - String script = ""; - String[] ats = selected.split(" "); - int cnt = ats.length; - if (cnt == 1) { - // valLab.setText("(Atomic number)"); - editValueTf.setText(""); - editValueTf.setEnabled(true); - script = "print {*}[" + selected + "].elemno"; - if (currVal != null) - currVal.setText("atomic number: " + runScriptNow(script)); - } else { - runScriptNow("measure off;measure " + selected + " " + (cnt == 2 ? - "\"2:%0.4VALUE //A\"" + ";measure " + selected - + "\"2:%0.4VALUE //A\"" :"")); - script = "print measure({*}["; - for (int i = 0; i < ats.length - 1; i++) - script += ats[i] + "],{*}["; - script += ats[ats.length - 1] + "]);"; - String s = runScriptNow(script); - if (s != null) { - if (s.split("\\s+").length > 1) - currVal.setText((cnt == 2 ? "distance: " : cnt == 3 ? "angle: " : cnt == 4 ? "dihedral angle: " : "value: ") + s.split("\\s+")[1]); - } + protected void setAtomBoxesFromSelection(String selected) { + if (selected == null) + selected = modelEditGetSelected(); + String[] split = PT.getTokens(selected); + System.out.println("setting " + selected); + for (int i = 0; i < atomNumBoxes.length; i++) { + atomNumBoxes[i].setText(i >= split.length ? "" : " " + split[i]); + System.out.println("set i=" + i + " " + atomNumBoxes[i].getText()); } + updateSelected(false); + } + private void setCurrentValue(String sval) { + currVal.setText(sval.length() == 0 ? "pick atoms..." : "current value: " + sval); + } + /** * callback notification from Jmol * @@ -1211,8 +1175,8 @@ redo.setEnabled(!redoStack.isEmpty()); // "({1})" rebond.setEnabled(((String) vwr.evaluateExpression("{transitionMetal}")).length() > 4); - if (editAction == MODEL_ACTION_MUTATE) { - actionSelected(editAction); + if (actionID == MODEL_ACTION_MUTATE) { + actionSelected(actionID); } runScriptNow("select none; select on;refresh"); } @@ -1327,7 +1291,9 @@ + ";restore orientation o2;set refreshing true"); break; case NBOService.MODE_MODEL_VALUE: - logValue(a[0]); + String sval = a[0].trim(); + logValue(sval); + setCurrentValue(sval); break; } } Modified: trunk/Jmol/src/org/gennbo/NBODialogRun.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-02-03 17:20:10 UTC (rev 21385) +++ trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-02-03 23:58:18 UTC (rev 21386) @@ -155,6 +155,7 @@ if (inputFileHandler.tfExt.getText().equals("47")) notifyLoad_r(); + inputFileHandler.setBrowseEnabled(true); return panel; } @@ -168,6 +169,7 @@ Box box = Box.createHorizontalBox(); ButtonGroup bg = new ButtonGroup(); rbLocal = new JRadioButton("Local"); + rbLocal.setSelected(true); rbLocal.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -295,7 +297,7 @@ String[] tokens = PT.getTokens(PT.rep(PT.rep(s, "$NBO", ""), "$END", "").trim()); for (String x : tokens) { if (x.indexOf("=") < 0) { - file47Keywords += x + " "; + file47Keywords += x.toUpperCase() + " "; } else { tfJobName.setText(x.substring(x.indexOf("=") + 1)); } Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-03 17:20:10 UTC (rev 21385) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-03 23:58:18 UTC (rev 21386) @@ -223,7 +223,7 @@ JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(createViewSearchJobBox(NBOFileHandler.MODE_SEARCH), BorderLayout.NORTH); - inputFileHandler.tfName.setText(""); +// inputFileHandler.tfName.setText(""); /////INPUT FILE///////////// Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-03 17:20:10 UTC (rev 21385) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-03 23:58:18 UTC (rev 21386) @@ -149,6 +149,8 @@ protected final static int VIEW_STATE_VECTOR = 2; protected final static int VIEW_STATE_CAMERA = 3; + public static final int MAX_COLUMNS = 14; // orbitals + protected JPanel buildViewPanel() { startingModelCount = vwr.ms.mc; panel = new JPanel(new BorderLayout()); @@ -171,12 +173,12 @@ inputFileHandler.setBrowseEnabled(true); - String fileType = runScriptNow("print _fileType"); - if (fileType.equals("GenNBO")) { - File f = new File( - runScriptNow("select within(model, visible); print _modelFile")); - inputFileHandler.setInputFile(NBOFileHandler.newNBOFile(f, "47")); - } +// String fileType = runScriptNow("print _fileType"); +// if (fileType.equals("GenNBO")) { +// File f = new File( +// runScriptNow("select within(model, visible); print _modelFile")); +// inputFileHandler.setInputFile(NBOFileHandler.newNBOFile(f, "47")); +// } return panel; } @@ -435,11 +437,7 @@ int x = (getX() + getWidth()) / 2 + 150; int y = (getY() + getHeight()) / 2 - 175; d.setLocation(x, y); - String[] sel = new String[3]; - sel[0] = planeFields[0].getText(); - sel[1] = planeFields[1].getText(); - sel[2] = planeFields[2].getText(); - showSelected(sel); + showSelected(planeFields); d.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { @@ -461,6 +459,13 @@ plane.setVisible(true); } + private void showSelected(JTextField[] t) { + String s = ""; + for (int i = t.length; --i >= 0;) + s += " " + t[i].getText(); + showSelected(s); + } + /** * Vector dialog */ @@ -512,10 +517,7 @@ int x = (getX() + getWidth()) / 2 + 150; int y = (getY() + getHeight()) / 2 - 150; d.setLocation(x, y); - String[] sel = new String[2]; - sel[0] = vectorFields[0].getText(); - sel[1] = vectorFields[1].getText(); - showSelected(sel); + showSelected(vectorFields); d.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { @@ -1191,23 +1193,15 @@ * @param atomno */ protected void notifyPick_v(String atomno) { - String[] sel; switch (viewState) { case VIEW_STATE_VECTOR: vectorFields[viewVectorPt++].setText(atomno); - sel = new String[2]; - sel[0] = vectorFields[0].getText(); - sel[1] = vectorFields[1].getText(); - showSelected(sel); + showSelected(vectorFields); viewVectorPt = viewVectorPt % 2; break; case VIEW_STATE_PLANE: planeFields[viewPlanePt++].setText(atomno); - sel = new String[3]; - sel[0] = planeFields[0].getText(); - sel[1] = planeFields[1].getText(); - sel[2] = planeFields[2].getText(); - showSelected(sel); + showSelected(planeFields); viewPlanePt = viewPlanePt % 3; break; case VIEW_STATE_MAIN: @@ -1428,7 +1422,7 @@ public OrbitalList() { super(); setLayoutOrientation(JList.VERTICAL_WRAP); - setVisibleRowCount(jmolOptionNONBO ? 15 : 10); + setVisibleRowCount(jmolOptionNONBO ? 15 : MAX_COLUMNS); setFont(nboFontLarge); //setColorScheme(); setFont(listFont); Modified: trunk/Jmol/src/org/gennbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOService.java 2017-02-03 17:20:10 UTC (rev 21385) +++ trunk/Jmol/src/org/gennbo/NBOService.java 2017-02-03 23:58:18 UTC (rev 21386) @@ -103,8 +103,12 @@ private String exeName = "NBOServe.exe"; private boolean doConnect; - protected boolean isReady; + private boolean isReady; + private void setReady(boolean tf) { + System.out.println("isready = " + tf); + isReady = tf; + } /** * A class to manage communication between Jmol and NBOServe. * @@ -312,11 +316,13 @@ // 2. Monitor every 10 ms until no further activity. - isReady = true; + setReady(true); int m = 0; do { n = m; Thread.sleep(10); + if (nboOut == null) + return null; } while ((m = nboOut.available()) > n); while (n > buffer.length) { buffer = AU.doubleLengthByte(buffer); @@ -339,7 +345,7 @@ */ public void closeProcess() { - isReady = false; + setReady(false); nboOut = null; try { @@ -415,6 +421,7 @@ */ protected void postToNBO(NBORequest request) { synchronized (lock) { + restartIfNecessary(); if (isReady && requestQueue.isEmpty() && currentRequest == null) { currentRequest = request; requestQueue.add(currentRequest); @@ -499,8 +506,10 @@ if (s.indexOf("FORTRAN STOP") >= 0) { dialog.alertError("NBOServe has stopped working - restarting"); + currentRequest = null; clearQueue(); restart(); + setReady(true); return true; } @@ -508,8 +517,10 @@ if (!s.contains("end of file")) { dialog.alertError(s); } + currentRequest = null; clearQueue(); restart(); + setReady(true); return true; } Modified: trunk/Jmol/src/org/jmol/shape/Measures.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Measures.java 2017-02-03 17:20:10 UTC (rev 21385) +++ trunk/Jmol/src/org/jmol/shape/Measures.java 2017-02-03 23:58:18 UTC (rev 21386) @@ -426,7 +426,11 @@ htMin = null; //toggling one that is hidden should be interpreted as DEFINE bsSelected = new BS(); - defineAll(Integer.MIN_VALUE, new Measurement().setPoints(ms, indices, null, defaultTickInfo), false, true, true); + Measurement m = new Measurement().setPoints(ms, indices, null, defaultTickInfo); + defineAll(Integer.MIN_VALUE, m, false, true, true); + int i = find(m); + if (i >= 0) + bsSelected.set(i); setIndices(); reformatDistances(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-02-04 07:26:42
|
Revision: 21387 http://sourceforge.net/p/jmol/code/21387 Author: hansonr Date: 2017-02-04 07:26:39 +0000 (Sat, 04 Feb 2017) Log Message: ----------- Jmol.___JmolVersion="14.8.2-beta-2017-02-03" bug fix: NBO plugin fixes noting undocumented set fontscaling true; font label 10 arial plain 0.020 - last number is a fontscaling factor that allows one to set a font size for - labels in angstroms. Roughly, this pointSize * factor is in Angstroms. Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOService.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-03 23:58:18 UTC (rev 21386) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-04 07:26:39 UTC (rev 21387) @@ -62,6 +62,8 @@ import javax.swing.JTextField; import javax.swing.ListCellRenderer; import javax.swing.ScrollPaneConstants; +import javax.swing.SwingUtilities; +import javax.swing.Timer; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -149,8 +151,6 @@ protected final static int VIEW_STATE_VECTOR = 2; protected final static int VIEW_STATE_CAMERA = 3; - public static final int MAX_COLUMNS = 14; // orbitals - protected JPanel buildViewPanel() { startingModelCount = vwr.ms.mc; panel = new JPanel(new BorderLayout()); @@ -287,9 +287,7 @@ @Override public void run() { - - if (alphaList != null) - alphaList = betaList = null; + alphaList = betaList = null; setNewBasis(); } }); @@ -953,7 +951,7 @@ boolean isBeta = isOpenShell && !alphaSpin.isSelected(); DefaultListModel<String> list = (isBeta ? betaList : alphaList); - if (list != null) { + if (list != null && list.size() > 0) { orbitals.setModelList(list, false); return; } @@ -964,6 +962,7 @@ alphaList = list; if (!jmolOptionNONBO) { + logCmd("select " + comboBasis.getSelectedItem() + " " + (isBeta ? "beta" : isOpenShell ? "alpha" : "")); postNBO_v(getMetaHeader(true).append("CMD LABEL"), NBOService.MODE_VIEW_LIST, list, "Getting list", null, null); } @@ -1211,7 +1210,9 @@ showOrbital(findNextAtomicOrbital(atomno, list)); return; } - String[] tok2 = tok[1].split(" "); + tok = tok[1].split(" "); + String at1 = tok[2]; + String at2 = tok[5]; switch (comboBasis.getSelectedIndex()) { case BASIS_AO: case BASIS_PNAO: @@ -1220,13 +1221,13 @@ break; case BASIS_PNHO: case BASIS_NHO: - showOrbital(selectOnNHO(tok2[2], tok2[5], list)); + showOrbital(selectOnNHO(at1 + "(" + at2 + ")", at2 + "(" + at1 + ")", list)); break; case BASIS_PNBO: case BASIS_NBO: case BASIS_PNLMO: case BASIS_NLMO: - showOrbital(selectOnNBO(tok2[2], tok2[5], list)); + showOrbital(selectOnNHO(at1 + "-" + at2, null, list)); break; } } @@ -1256,38 +1257,47 @@ return curr; } - protected int selectOnNBO(String at1, String at2, DefaultListModel<String> list) { - String bond = at1 + "-" + at2; - int curr = -1, size = list.getSize(); - if (currOrb.replace(" ", "").contains(bond)) - curr = list.indexOf(currOrb); - for (int i = curr + 1; i < size + curr; i++) { - String str = list.getElementAt(i % size).replace(" ", ""); - if (str.contains(bond)) { - orbitals.setSelectedIndex(i % size); - currOrb = list.get(i % size); - return i % size; - } - } - return curr; - } +// protected int selectOnNBO(String at1, String at2, DefaultListModel<String> list) { +// String bond = at1 + "-" + at2; +// int curr = -1, size = list.getSize(); +// if (currOrb.replace(" ", "").contains(bond)) +// curr = list.indexOf(currOrb); +// for (int i = curr + 1; i < size + curr; i++) { +// String str = list.getElementAt(i % size).replace(" ", ""); +// if (str.contains(bond)) { +// orbitals.setSelectedIndex(i % size); +// currOrb = list.get(i % size); +// return i % size; +// } +// } +// return curr; +// } - protected int selectOnNHO(String at1, String at2, DefaultListModel<String> list) { - String bond = at1 + "(" + at2 + ")"; - String bond2 = at2 + "(" + at1 + ")"; + protected int selectOnNHO(String b1, String b2, DefaultListModel<String> list) { int curr = -1, size = list.getSize(); - if (currOrb.replace(" ", "").contains(bond)) + if (currOrb.replace(" ", "").contains(b1)) curr = list.indexOf(currOrb); + int n = orbitals.getVisibleRowCount(); for (int i = curr + 1; i < size + curr; i++) { String str = list.getElementAt(i % size).replace(" ", ""); - if (str.contains(bond)) { - orbitals.setSelectedIndex(i % size); - currOrb = list.get(i % size); + if (str.contains(b1) || b2 != null && str.contains(b2)) { + final int ipt = i % size; + orbitals.setSelectedIndex(ipt); + currOrb = list.get(ipt); +// BH: I cannot get this to work! +// orbitals.setVisibleRowCount(n); +// revalidate(); +// repaint(); +// SwingUtilities.invokeLater(new Runnable() { +// +// @Override +// public void run() { +// orbitals.ensureIndexIsVisible(ipt); // this does not work. +// +// } +// +// }); return i % size; - } else if (str.contains(bond2)) { - orbitals.setSelectedIndex(i % size); - currOrb = list.get(i % size); - return i % size; } } return curr; @@ -1360,16 +1370,18 @@ viewSettingsBox.setVisible(!jmolOptionNONBO); // set list - - if (type.startsWith("P")) + DefaultListModel<String> list = (isBeta ? betaList : alphaList); + if (jmolOptionNONBO) { + if (type.startsWith("P")) type = type.substring(1); - if (type.equalsIgnoreCase("NLMO")) + if (type.equalsIgnoreCase("NLMO")) type = "NBO"; - String[] a = ((Map<String, String[]>) moData.get("nboLabelMap")) - .get((isBeta ? "beta_" : "") + type); - DefaultListModel<String> list = (isBeta ? betaList : alphaList); - for (int i = 0; i < a.length; i++) - list.addElement((i + 1) + ". " + a[i] + " "); + String[] a = ((Map<String, String[]>) moData.get("nboLabelMap")) + .get((isBeta ? "beta_" : "") + type); + list.clear(); + for (int i = 0; i < a.length; i++) + list.addElement((i + 1) + ". " + a[i] + " "); + } orbitals.setModelList(list, true); } catch (NullPointerException e) { //not a problem? log(e.getMessage() + " reading file", 'r'); @@ -1422,7 +1434,7 @@ public OrbitalList() { super(); setLayoutOrientation(JList.VERTICAL_WRAP); - setVisibleRowCount(jmolOptionNONBO ? 15 : MAX_COLUMNS); + setVisibleRowCount(-1); // indicates to automatically calculate max number of rows setFont(nboFontLarge); //setColorScheme(); setFont(listFont); @@ -1460,6 +1472,7 @@ private JLabel cellLabel; protected boolean myTurn; + private boolean toggled; protected Component renderCell(int index) { if (cellLabel == null) { @@ -1471,10 +1484,13 @@ } }; + cellLabel.setFont(listFont); + cellLabel.setMinimumSize(new Dimension(180, 20)); + cellLabel.setPreferredSize(new Dimension(180, 20)); + cellLabel.setMaximumSize(new Dimension(180, 20)); + cellLabel.setOpaque(true); } - cellLabel.setFont(listFont); cellLabel.setText(getModel().getElementAt(index)); - cellLabel.setOpaque(true); myTurn = true; Color bgcolor = (!bsOn.get(index) ? Color.WHITE : bsNeg.get(index) ? orbColor2 : orbColor1); @@ -1531,16 +1547,22 @@ script += updateBitSetFromModel(); else updateModelFromBitSet(); + logCmd("select..."); //System.out.println("update " + bsOn + " " + bsKnown + " " + iClicked); - for (int i = model.getSize(); --i >= 0;) { + for (int i = 0, n = model.getSize(); i < n; i++) { boolean isOn = bsOn.get(i); if (i == iClicked || isOn && !bsKnown.get(i) || isSelectedIndex(i) != isOn) { String id = "mo" + i; - if (!isOn || bsKnown.get(i)) - bsOn.setBitTo(i, !isOn); + if (!isOn || bsKnown.get(i)) { + if (isOn && bsNeg.get(i)) { + bsKnown.clear(i); + bsNeg.clear(i); + } + bsOn.setBitTo(i, isOn = !isOn); + } boolean isKnown = bsKnown.get(i); - if (isKnown && !bsOn.get(i)) { + if (!bsOn.get(i)) { // just turn it off script += "isosurface mo" + i + " off;"; } else if (isKnown) { @@ -1552,10 +1574,13 @@ script += getJmolIsosurfaceScript(id, type, i, isBeta, bsNeg.get(i)); } } + if (bsOn.get(i)) { + logCmd("...orbital " + orbitals.getModel().getElementAt(i) + (bsNeg.get(i) ? " [-]" : "")); + } } updateModelFromBitSet(); runScriptQueued(script); - // System.out.println("known" + bsKnown + " on" + bsOn + " neg" + bsNeg + " " + script); + //System.out.println("known" + bsKnown + " on" + bsOn + " neg" + bsNeg + " " + script); } private String updateBitSetFromModel() { @@ -1611,6 +1636,9 @@ @Override public void mousePressed(MouseEvent e) { + killMouseTimer(); + mouseTimer = getMouseTimer(); + // System.out.println("PRESS" + e); // System.out.println("press " + PT.toJSON(null, getSelectedIndices()) + e.getClickCount()); } @@ -1619,22 +1647,50 @@ public void mouseReleased(MouseEvent e) { // System.out.println("RELEASE" + e); // System.out.println("release " + PT.toJSON(null, getSelectedIndices())); + boolean toggled = this.toggled; + killMouseTimer(); + int i = getSelectedIndex(); +// if (toggled) +// this.toggleOrbitalNegation(i); + this.toggled = false; + updateIsosurfacesInJmol(i); } - private long lastTime = 0; - private int lastPicked = 999; - private final static long DBLCLICK_THRESHOLD_MS = 300; + private void killMouseTimer() { + if (mouseTimer != null) + mouseTimer.stop(); + mouseTimer = null; + toggled = false; + } + private final static int DBLCLICK_THRESHOLD_MS = 300; + + private Timer mouseTimer; + + + private Timer getMouseTimer() { + Timer t = new Timer(DBLCLICK_THRESHOLD_MS, new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + int i = getSelectedIndex(); + if (bsOn.get(i)) { + toggled = true; + toggleOrbitalNegation(i); + repaint(); + } + + } + }); + + t.setRepeats(false); + t.start(); + System.out.println("timer started"); + return t; + + } @Override public void mouseClicked(MouseEvent e) { - int i = getSelectedIndex(); - if (e.getClickCount() > 1 || lastPicked == i - && System.currentTimeMillis() - lastTime < DBLCLICK_THRESHOLD_MS) { - toggleOrbitalNegation(i); - } - updateIsosurfacesInJmol(i); - lastTime = System.currentTimeMillis(); - lastPicked = i; } @Override @@ -1724,6 +1780,7 @@ for (int i = 0; i < lines.length; i++) { list.addElement(lines[i]); } + orbitals.setModelList(list, true); break; case NBOService.MODE_VIEW_IMAGE: String fname = inputFileHandler.inputFile.getParent() + "\\" Modified: trunk/Jmol/src/org/gennbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOService.java 2017-02-03 23:58:18 UTC (rev 21386) +++ trunk/Jmol/src/org/gennbo/NBOService.java 2017-02-04 07:26:39 UTC (rev 21387) @@ -367,6 +367,7 @@ // we don't care } nboServer = null; + currentRequest = null; } /** @@ -509,7 +510,6 @@ currentRequest = null; clearQueue(); restart(); - setReady(true); return true; } @@ -520,7 +520,6 @@ currentRequest = null; clearQueue(); restart(); - setReady(true); return true; } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2017-02-03 23:58:18 UTC (rev 21386) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2017-02-04 07:26:39 UTC (rev 21387) @@ -123,7 +123,7 @@ isOK = readData31(line1); } if (!isOK) - Logger.error("Unimplemented shell type -- no orbitals avaliable: " + line); + Logger.error("Unimplemented shell type -- no orbitals available: " + line); if (isOutputFile) return; if (isOK) @@ -159,18 +159,19 @@ discardLinesUntilContains("BETA"); filterMO(); } - boolean isMO = !nboType.equals("AO"); + boolean isAO = nboType.equals("AO"); + boolean isNBO = !isAO && !nboType.equals("MO"); nOrbitals = orbitals.size(); if (nOrbitals == 0) return; line = null; - if (!isMO) + if (!isNBO) nOrbitals = nOrbitals0 + nAOs; for (int i = nOrbitals0; i < nOrbitals; i++) { Map<String, Object> mo = orbitals.get(i); float[] coefs = new float[nAOs]; mo.put("coefficients", coefs); - if (isMO) { + if (!isAO) { if (line == null) { while (rd() != null && Float.isNaN(parseFloatStr(line))) { filterMO(); //switch a/b @@ -539,6 +540,14 @@ type = "NBO"; tokens = map.get((betaOnly ? "beta_" : "") + type); moData.put("nboLabelMap", map); + if (tokens == null) { + tokens = new String[nAOs]; + for (int i = 0; i < nAOs; i++) + tokens[i] = nboType + (i + 1); + map.put(nboType, tokens); + if (isOpenShell) + map.put("beta_" + nboType, tokens); + } moData.put("nboLabels", tokens); boolean addBetaSet = (isOpenShell && !betaOnly && !isArchive); if (addBetaSet) Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-03 23:58:18 UTC (rev 21386) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-04 07:26:39 UTC (rev 21387) @@ -49,8 +49,17 @@ # 10. Run jmol/tools build-release.xml # -Jmol.___JmolVersion="14.8.2-beta-2017-02-02" +Jmol.___JmolVersion="14.8.2-beta-2017-02-03" +bug fix: NBO plugin fixes + +noting undocumented + + set fontscaling true; font label 10 arial plain 0.020 + + - last number is a fontscaling factor that allows one to set a font size for + - labels in angstroms. Roughly, this pointSize * factor is in Angstroms. + bug fix: *.CA should pick up calcium in a PDB file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-02-05 13:05:25
|
Revision: 21390 http://sourceforge.net/p/jmol/code/21390 Author: hansonr Date: 2017-02-05 13:05:22 +0000 (Sun, 05 Feb 2017) Log Message: ----------- NBO refactoring meta command posting Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/gennbo/NBODialogRun.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-04 23:33:50 UTC (rev 21389) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-05 13:05:22 UTC (rev 21390) @@ -682,11 +682,11 @@ */ protected void showAtomNums(boolean alpha) { if (!showAtNum) { - runScriptNow("select visible;label off; select none;refresh"); + runScriptNow("measurements off;select visible;label off; select none;refresh"); return; } SB sb = new SB(); - sb.append("select visible;label %a;"); + sb.append("measurements off;select visible;label %a;"); Map<String, String> lonePairs = inputFileHandler.getChooseListMap(alpha, true); Map<String, String> loneV = inputFileHandler.getChooseListMap(alpha, false); @@ -962,4 +962,28 @@ "47", mode, "47"); } + protected SB postAddCmd(SB sb, String cmd) { + return sb.append("CMD ").append(cmd).append(sep); + } + + protected void postAddGlobal(SB sb, String key, String val) { + sb.append("GLOBAL ").append(key).append(" ").append(val).append(sep); + } + + protected void postAddGlobalT(SB sb, String key, JTextField t) { + sb.append("GLOBAL ").append(key).append(" ").append(t.getText()).append(sep); + } + + protected void postAddGlobalI(SB sb, String label, int offset, JComboBox<String> cb) { + sb.append("GLOBAL I_").append(label).append(" ").appendI(cb == null ? offset : cb.getSelectedIndex() + offset).append(sep); + } + + protected void postAddGlobalC(SB sb, String label, String val) { + sb.append("GLOBAL C_").append(label).append(" ").append(val).append(sep); + } + + + + + } Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-04 23:33:50 UTC (rev 21389) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-05 13:05:22 UTC (rev 21390) @@ -891,7 +891,7 @@ if (actionID == MODEL_ACTION_REBOND) cmd += jcSymOps.getSelectedItem().toString(); runScriptNow("save orientation o2"); - sb.append("CMD " + cmd); + postAddCmd(sb, cmd); logCmd(cmd); jbApply.setEnabled(false); @@ -912,7 +912,7 @@ protected void getSymmetry() { String cmd = "symmetry"; logCmd(cmd); - postNBO_m(new SB().append("CMD " + cmd), NBOService.MODE_MODEL_SYMMETRY, "Checking Symmetry", null, null); + postNBO_m(postAddCmd(new SB(), cmd), NBOService.MODE_MODEL_SYMMETRY, "Checking Symmetry", null, null); } /** @@ -968,7 +968,7 @@ jtNIHInput.setText(""); s = "show " + model; saveFileHandler.setInput(null, "line", "mol"); - sb.append("CMD " + s); + postAddCmd(sb, s); logCmd(s); postNBO_m(sb, NBOService.MODE_MODEL_NEW, "model from line input...", null, null); @@ -992,11 +992,11 @@ if (undoRedo) runScriptNow("save orientation o2"); SB sb = new SB(); - sb.append("GLOBAL C_PATH " + nboService.getServerPath(null) + "/" + sep); - sb.append("GLOBAL C_ESS c" + sep); - sb.append("GLOBAL C_FNAME jmol_outfile" + sep); - sb.append("GLOBAL C_IN_EXT cfi" + sep); - sb.append("CMD use"); + postAddGlobalC(sb, "PATH", nboService.getServerPath(null) + "/"); + postAddGlobalC(sb, "ESS", "c"); + postAddGlobalC(sb, "FNAME", "jmol_outfile"); + postAddGlobalC(sb, "IN_EXT", "cfi"); + postAddCmd(sb, "use"); postNBO_m(sb, (undoRedo ? NBOService.MODE_MODEL_UNDO_REDO : NBOService.MODE_MODEL_TO_NBO), (alsoLoadJmol ? "Loading" : "Sending") + " model to NB", "jmol_outfile.cfi", s); } @@ -1022,11 +1022,11 @@ jtLineFormula.setText(""); } modelOrigin = ORIGIN_FILE_INPUT; - sb.append("GLOBAL C_PATH " + path + sep); - sb.append("GLOBAL C_ESS " + ess + sep); - sb.append("GLOBAL C_FNAME " + fname + sep); - sb.append("GLOBAL C_IN_EXT " + ext.toLowerCase() + sep); - sb.append("CMD use"); + postAddGlobalC(sb, "PATH", path); + postAddGlobalC(sb, "ESS", ess); + postAddGlobalC(sb, "FNAME", fname); + postAddGlobalC(sb, "IN_EXT", ext.toLowerCase()); + postAddCmd(sb, "use"); clearSelected(false); logCmd("use." + ess + " " + fname + "." + ext); postNBO_m(sb, NBOService.MODE_MODEL_NEW, "Loading model from NBO...", null, null); @@ -1049,11 +1049,12 @@ } String ess = getEss(ext, false); SB sb = new SB(); - sb.append("GLOBAL C_PATH " + path + sep); - sb.append("GLOBAL C_ESS " + ess + sep); - sb.append("GLOBAL C_FNAME " + fname + sep); - sb.append("GLOBAL C_OUT_EXT " + ext + sep); - sb.append("CMD save"); + + postAddGlobalC(sb, "PATH", path); + postAddGlobalC(sb, "ESS", ess); + postAddGlobalC(sb, "FNAME", fname); + postAddGlobalC(sb, "OUT_EXT", ext.toLowerCase()); + postAddCmd(sb, "save"); postNBO_m(sb, NBOService.MODE_MODEL_SAVE, "Saving model...", null, null); logCmd("save." + ess + " " + fname); logValue("--Model Saved--<br>" + path + "\\" + fname + "." + ext); Modified: trunk/Jmol/src/org/gennbo/NBODialogRun.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-02-04 23:33:50 UTC (rev 21389) +++ trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-02-05 13:05:22 UTC (rev 21390) @@ -783,10 +783,11 @@ return; get47FileData(true); SB sb = new SB(); - sb.append("GLOBAL C_PATH " + inputFileHandler.inputFile.getParent() + sep); - sb.append("GLOBAL C_JOBSTEM " + inputFileHandler.jobStem + sep); - sb.append("GLOBAL C_ESS gennbo" + sep); - sb.append("GLOBAL C_LABEL_1 FILE=" + jobName + sep); + postAddGlobalC(sb, "PATH", inputFileHandler.inputFile.getParent()); + postAddGlobalC(sb, "JOBSTEM", inputFileHandler.jobStem); + postAddGlobalC(sb, "ESS", "gennbo"); + postAddGlobalC(sb, "LABEL_1", "FILE=" + jobName); + logCmd("RUN GenNBO FILE=" + jobName + " " + file47Keywords); postNBO_r(sb, NBOService.MODE_RUN_GENNBO, "Running GenNBO..."); Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-04 23:33:50 UTC (rev 21389) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-05 13:05:22 UTC (rev 21390) @@ -31,9 +31,7 @@ import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.io.BufferedReader; import java.io.File; -import java.io.StringReader; import java.util.Hashtable; import java.util.Map; @@ -202,11 +200,10 @@ " DIz : dipole moment operator (z component)" }; int operator = 1; - protected JComboBox<String> comboSearchOrb, comboSearchOrb2, comboUnit, + protected JComboBox<String> comboSearchOrb1, comboSearchOrb2, comboUnit1, comboAtom1, comboAtom2, comboBasis2, comboBasisOperation; protected JLabel unitLabel; - protected DefaultComboBoxModel<String> list1, list2, list3; protected boolean relabel; private Box optionBox; @@ -291,7 +288,7 @@ radioOrbNBO.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { - showOrbJmol("PNBO", comboSearchOrb.getSelectedIndex(), "NBO"); + showOrbJmol("PNBO", comboSearchOrb1.getSelectedIndex(), "NBO"); } }); radioOrbNBO.setBackground(null); @@ -349,8 +346,8 @@ optionBox.add(optionBox2); panel.add(optionBox); - comboBasis = new JComboBox<String>(NBODialogView.basSet); - comboBasis.setUI(new StyledComboBoxUI(180, -1)); + comboBasis1 = new JComboBox<String>(NBODialogView.basSet); + comboBasis1.setUI(new StyledComboBoxUI(180, -1)); inputFileHandler.setBrowseEnabled(true); @@ -442,28 +439,28 @@ case KEYWD_NBO: case KEYWD_BEND: case KEYWD_DIPOLE: - postListRequest("o", list1); + postListRequest("o", comboSearchOrb1); break; case KEYWD_E2PERT: - postListRequest("d nbo", list1); - postListRequest("a nbo", list2); + postListRequest("d nbo", comboSearchOrb1); + postListRequest("a nbo", comboSearchOrb2); break; case KEYWD_NLMO: - postListRequest("o", list2); + postListRequest("o", comboSearchOrb2); break; case KEYWD_STERIC: - postListRequest("d", list1); - postListRequest("d'", list2); + postListRequest("d", comboSearchOrb1); + postListRequest("d'", comboSearchOrb2); break; case KEYWD_CMO: - postListRequest("n", list1); + postListRequest("n", comboSearchOrb1); break; } } protected void doSelectKeyword() { - if (searchKeywordNumber == KEYWD_NRT && list3.getSize() > 0) - comboUnit.setSelectedIndex(0); + if (searchKeywordNumber == KEYWD_NRT && comboUnit1.getModel().getSize() > 0) + comboUnit1.setSelectedIndex(0); SB script = new SB(); if (relabel) { showAtomNums(alphaSpin.isSelected()); @@ -533,7 +530,7 @@ } protected void getBasisOperations2(boolean andUpdateList2) { - String b1 = comboBasis.getSelectedItem().toString(); + String b1 = comboBasis1.getSelectedItem().toString(); String b2 = comboBasis2.getSelectedItem().toString(); changeKey(new String[] { "Current r(ow),c(olumn) matrix element:", " (1) current <" + b1 + "(r)|" + b2 + "(c)> value", @@ -547,7 +544,7 @@ " (6) max <" + b1 + "(*r)|" + b2 + "(*c)> value for any *r,*c", " (7) min <" + b1 + "(*r)|" + b2 + "(*c)> value for any *r,*c" }); if (andUpdateList2) { - postListRequest("c", list2); + postListRequest("c", comboSearchOrb2); } } @@ -572,7 +569,7 @@ case KEYWD_NPA: load(31, false); comboAtom2 = null; - comboBasis.setSelectedIndex(BASIS_PNAO); // WAS BASIS_NAO ? + comboBasis1.setSelectedIndex(BASIS_PNAO); // WAS BASIS_NAO ? keyProp = "NPA"; setKeyword(new String[] { "b", "a", "o PNAO", "u" }, new String[] { "Basis: ", "Atom: ", "Orbital: ", "Unit: " }); @@ -580,7 +577,7 @@ break; case KEYWD_NBO: load(36, true); - comboBasis.setSelectedIndex(BASIS_PNBO); + comboBasis1.setSelectedIndex(BASIS_PNBO); keyProp = "NBO"; setKeyword(new String[] { "b", "o PNBO" }, new String[] { "Basis: ", "Orbital: " }); @@ -588,7 +585,7 @@ break; case KEYWD_NLMO: load(38, true); - comboBasis.setSelectedIndex(BASIS_PNLMO); + comboBasis1.setSelectedIndex(BASIS_PNLMO); keyProp = "NLMO"; setKeyword(new String[] { "b", "o PNLMO" }, new String[] { "Basis: ", "Orbital: " }); @@ -596,7 +593,7 @@ break; case KEYWD_BEND: load(34, true); - comboBasis.setSelectedIndex(BASIS_PNHO); + comboBasis1.setSelectedIndex(BASIS_PNHO); keyProp = "BEND"; setKeyword(new String[] { "b", "o PNHO" }, new String[] { "Basis: ", "Orbital: " }); @@ -615,7 +612,7 @@ break; case KEYWD_E2PERT: load(36, true); - comboBasis.setSelectedIndex(BASIS_PNBO); + comboBasis1.setSelectedIndex(BASIS_PNBO); keyProp = "E2"; setKeyword(new String[] { "b", "d nbo", "a nbo", "u" }, new String[] { "Basis: ", "d-NBO: ", "a-NBO:", "Unit: " }); @@ -623,7 +620,7 @@ break; case KEYWD_STERIC: load(38, true); - comboBasis.setSelectedIndex(BASIS_PNLMO); + comboBasis1.setSelectedIndex(BASIS_PNLMO); keyProp = "STERIC"; setKeyword(new String[] { "b", "d nlmo", "d' nlmo", "u" }, new String[] { "Basis: ", "d-NLMO: ", "d'-NLMO:", "Unit: " }); @@ -631,7 +628,7 @@ break; case KEYWD_CMO: load(40, true); - comboBasis.setSelectedIndex(BASIS_MO); + comboBasis1.setSelectedIndex(BASIS_MO); keyProp = "CMO"; file47Keywords = cleanNBOKeylist(get47FileData(true)[1], true); if (!file47Keywords.contains("CMO")) { @@ -644,7 +641,7 @@ break; case KEYWD_DIPOLE: load(38, true); - comboBasis.setSelectedIndex(BASIS_PNLMO); + comboBasis1.setSelectedIndex(BASIS_PNLMO); keyProp = "DIPOLE"; setKeyword(new String[] { "b", "o", "u" }, new String[] { "Basis: ", "Orbital: ", "Unit:" }); @@ -653,9 +650,9 @@ case KEYWD_OPBAS: load(31, true); viewSettingsBox.removeAll(); - comboBasis = new JComboBox<String>(NBODialogView.basSet); - comboBasis.setUI(new StyledComboBoxUI(180, -1)); - comboBasis.setEditable(false); + comboBasis1 = new JComboBox<String>(NBODialogView.basSet); + comboBasis1.setUI(new StyledComboBoxUI(180, -1)); + comboBasis1.setEditable(false); comboBasisOperation.requestFocus(); keyProp = "OPBAS"; setKeyword("b1 r c".split(" "), new String[] { "Basis:", "Row:", @@ -705,7 +702,7 @@ b.add(radioOrbMO); b.add(radioOrbNBO); } else if (key.equals("b")) { - String str = peeify(comboBasis.getSelectedItem().toString()); + String str = peeify(comboBasis1.getSelectedItem().toString()); b.add(new JLabel(str)); //runScriptQueued("NBO TYPE " + str + ";MO TYPE " + str); b.add(Box.createRigidArea(new Dimension(20, 0))); @@ -716,54 +713,48 @@ innerListPanel.add(b); } else if (PT.isOneOf(items[i], "o PNBO;o PNLMO;r;d nlmo;n;d nbo;o PNHO;o")) { - list1 = new DefaultComboBoxModel<String>(); - comboSearchOrb = new JComboBox<String>(list1); + comboSearchOrb1 = new JComboBox<String>(new DefaultComboBoxModel<String>()); setComboSearchOrbDefaultAction(key); - innerListPanel.add(comboSearchOrb); - postListRequest(key, list1); + innerListPanel.add(comboSearchOrb1); + postListRequest(key, comboSearchOrb1); } else if (PT.isOneOf(items[i], "c;d' nlmo;a nbo;c cmo;o PNAO")) { - list2 = new DefaultComboBoxModel<String>(); - comboSearchOrb2 = new JComboBox<String>(list2); - postListRequest(key, list2); + comboSearchOrb2 = new JComboBox<String>(new DefaultComboBoxModel<String>()); + postListRequest(key, comboSearchOrb2); setComboSearchOrb2DefaultAction(key, items[i]); innerListPanel.add(comboSearchOrb2); } else if (key.equals("u")) { - list3 = new DefaultComboBoxModel<String>(); - comboUnit = new JComboBox<String>(list3); - postListRequest(key, list3); + comboUnit1 = new JComboBox<String>(new DefaultComboBoxModel<String>()); + postListRequest(key, comboUnit1); unitLabel = new JLabel(); Box box = Box.createHorizontalBox(); - box.add(comboUnit); + box.add(comboUnit1); box.add(unitLabel); innerListPanel.add(box); unitLabel.setVisible(false); } else if (key.equals("rs")) { - list3 = new DefaultComboBoxModel<String>(); - comboUnit = new JComboBox<String>(list3); - postListRequest("r", list3); - innerListPanel.add(comboUnit); + comboUnit1 = new JComboBox<String>(new DefaultComboBoxModel<String>()); + postListRequest("r", comboUnit1); + innerListPanel.add(comboUnit1); } else if (key.equals("a")) { - list1 = new DefaultComboBoxModel<String>(); - comboAtom1 = new JComboBox<String>(list1); - postListRequest("a", list1); + comboAtom1 = new JComboBox<String>(new DefaultComboBoxModel<String>()); + postListRequest("a", comboAtom1); comboAtom1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (comboAtom2 == null) runScriptQueued("select on; select {*}[" - + (comboAtom1.getSelectedIndex() + 1) + "]"); + + (comboAtom1.getSelectedIndex()) + "]"); else runScriptQueued("select on; select remove{*}; " - + "select add {*}[" + (comboAtom1.getSelectedIndex() + 1) - + "]; select add {*}[" + (comboAtom2.getSelectedIndex() + 1) + + "select add {*}[" + (comboAtom1.getSelectedIndex()) + + "]; select add {*}[" + (comboAtom2.getSelectedIndex()) + "]"); } }); innerListPanel.add(comboAtom1); } else if (key.equals("a'")) { - list2 = new DefaultComboBoxModel<String>(); - comboAtom2 = new JComboBox<String>(list2); - postListRequest("a", list2); + comboAtom2 = new JComboBox<String>(new DefaultComboBoxModel<String>()); + postListRequest("a", comboAtom2); comboAtom2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -775,9 +766,9 @@ innerListPanel.add(comboAtom2); } else if (key.equals("b1")) { Box b = Box.createHorizontalBox(); - b.add(comboBasis); - comboBasis.setSelectedIndex(BASIS_AO); - comboBasis.addActionListener(new ActionListener() { + b.add(comboBasis1); + comboBasis1.setSelectedIndex(BASIS_AO); + comboBasis1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { doSetBasis(); @@ -801,9 +792,9 @@ }); innerListPanel.add(comboBasis2); } else if (key.equals("b12")) { - comboBasis = new JComboBox<String>(NBODialogView.basSet); - comboBasis.setUI(new StyledComboBoxUI(180, -1)); - innerListPanel.add(comboBasis); + comboBasis1 = new JComboBox<String>(NBODialogView.basSet); + comboBasis1.setUI(new StyledComboBoxUI(180, -1)); + innerListPanel.add(comboBasis1); } } logCmd(keyProp + " Search Results:"); @@ -819,18 +810,18 @@ } private void setComboSearchOrbDefaultAction(final String key) { - comboSearchOrb.addActionListener(new ActionListener() { + comboSearchOrb1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (comboSearchOrb.getSelectedIndex() <= 0) + if (comboSearchOrb1.getSelectedIndex() <= 0) return; checkOptionClickForOrbitalSelection(); if (key.equals("n")) { - showOrbJmol("NBO", comboSearchOrb.getSelectedIndex(), key); + showOrbJmol("NBO", comboSearchOrb1.getSelectedIndex(), key); radioOrbNBO.doClick(); } else - showOrbJmol(comboBasis.getSelectedItem().toString(), - comboSearchOrb.getSelectedIndex(), key); + showOrbJmol(comboBasis1.getSelectedItem().toString(), + comboSearchOrb1.getSelectedIndex(), key); } }); } @@ -871,9 +862,9 @@ if (searchKeywordNumber == KEYWD_BAS1BAS2) { showOrbJmol(comboBasis2.getSelectedItem().toString(), index2, "b2"); } else if (key.equals("a")) { - showOrbJmol("NBO", list1.getSize() + (index2 - 1), key); + showOrbJmol("NBO", comboSearchOrb1.getModel().getSize() + (index2 - 1), key); } else { - showOrbJmol(comboBasis.getSelectedItem().toString(), index2, key); + showOrbJmol(comboBasis1.getSelectedItem().toString(), index2, key); } if (item.equals("c cmo")) { radioOrbMO.doClick(); @@ -891,14 +882,14 @@ if (comboBasis2 == null) return; getBasisOperations2(false); - postListRequest("r", list1); + postListRequest("r", comboSearchOrb1); break; case KEYWD_OPBAS: loadModelFileNow("" + inputFileHandler.newNBOFileForExt("" - + (31 + comboBasis.getSelectedIndex()))); - postListRequest("r", list1); - postListRequest("c", list2); + + (31 + comboBasis1.getSelectedIndex()))); + postListRequest("r", comboSearchOrb1); + postListRequest("c", comboSearchOrb2); break; default: getBasisOperations(comboBasisOperation.getSelectedItem().toString().trim().split(" ")[0]); @@ -919,24 +910,27 @@ } protected void getSearchValue(int op) { - if (relabel) { - runScriptQueued("select add {*}.bonds; color bonds lightgrey; select none"); - showAtomNums(alphaSpin.isSelected()); - for (int i = 0; i < nBonds; i++) { - runScriptQueued("MEASUREMENT ID '" + i + "' off "); - } - relabel = false; - } + // check orbital is selected + JComboBox<String> orb1 = comboSearchOrb1; + JComboBox<String> orb2 = null, atom1 = null, atom2 = null, unit1 = null; + String labelOrb1 = "ORB_1", labelOrb2 = "ORB_2", + labelAtom1 = "ATOM_1", labelAtom2 = "ATOM_2", + labelUnit1 = "UNIT_1"; + int offset1 = 0, offset2 = 0; + final SB sb = getMetaHeader(false); - sb.append("GLOBAL I_KEYWORD " + searchKeywordNumber + sep); + postAddGlobalI(sb, "KEYWORD", searchKeywordNumber, null); boolean isLabel = false; boolean isLabelBonds = false; + + // generally an offset is 1 because meta commands are 1-based, + // but if a combobox has a <select ...> in position 1, then the offset will be 0 + switch (searchKeywordNumber) { case KEYWD_NPA: - sb.append("GLOBAL I_ATOM_1 " + (comboAtom1.getSelectedIndex() + 1) + sep); - sb.append("GLOBAL I_UNIT_1 " + (comboUnit.getSelectedIndex() + 1) + sep); - sb.append("GLOBAL I_ORB_1 " + (comboSearchOrb2.getSelectedIndex()) - + sep); + orb1 = comboSearchOrb2; + atom1 = comboAtom1; + unit1 = comboUnit1; if (op > 10) { isLabel = true; op = 12; @@ -945,58 +939,135 @@ case KEYWD_NBO: case KEYWD_BEND: case KEYWD_NLMO: - sb.append("GLOBAL I_ORB_1 " + (comboSearchOrb.getSelectedIndex()) - + sep); + // just orb1 break; case KEYWD_E2PERT: - sb.append("GLOBAL I_d_NBO_1 " + (comboSearchOrb.getSelectedIndex()) - + sep); - sb.append("GLOBAL I_a_NBO " - + (comboSearchOrb2.getSelectedIndex() - + comboSearchOrb.getModel().getSize() + 1) + sep); - sb.append("GLOBAL I_UNIT_1 " + (comboUnit.getSelectedIndex() + 1) + sep); + labelOrb1 = "d_NBO_1"; + labelOrb2 = "a_NBO"; + orb2 = comboSearchOrb2; + offset2 = orb1.getModel().getSize() + 1; break; case KEYWD_NRT: - sb.append("GLOBAL I_ATOM_1 " + (comboAtom1.getSelectedIndex() + 1) + sep); - sb.append("GLOBAL I_ATOM_2 " + (comboAtom2.getSelectedIndex() + 1) + sep); - sb.append("GLOBAL I_RES_STR " + (comboUnit.getSelectedIndex() + 1) + sep); + orb1 = null; + atom1 = comboAtom1; + atom2 = comboAtom2; + unit1 = comboUnit1; + labelUnit1 = "RES_STR"; isLabel = (op == 9); isLabelBonds = (op == 10); break; case KEYWD_STERIC: - sb.append("GLOBAL I_d_NBO_1 " + (comboSearchOrb.getSelectedIndex()) - + sep); - sb.append("GLOBAL I_d_NBO_2 " + (comboSearchOrb2.getSelectedIndex()) - + sep); - sb.append("GLOBAL I_UNIT_1 " + (comboUnit.getSelectedIndex() + 1) + sep); + labelOrb1 = "d_NBO_1"; + orb2 = comboSearchOrb2; + labelOrb2 = "d_NBO_2"; + unit1 = comboUnit1; break; case KEYWD_CMO: - sb.append("GLOBAL I_CMO " + (comboSearchOrb2.getSelectedIndex()) - + sep); - sb.append("GLOBAL I_NBO " + (comboSearchOrb.getSelectedIndex()) + sep); + labelOrb1 = "NBO"; + orb2 = comboSearchOrb2; + labelOrb2 = "CMO"; break; case KEYWD_DIPOLE: - sb.append("GLOBAL I_ORB_1 " + (comboSearchOrb.getSelectedIndex()) - + sep); - sb.append("GLOBAL I_UNIT_1 " + (comboUnit.getSelectedIndex() + 1) + sep); + unit1 = comboUnit1; break; case KEYWD_OPBAS: - sb.append("GLOBAL I_BAS_1 " + (comboBasis.getSelectedIndex() + 1) + sep); - sb.append("GLOBAL I_OPERATOR " + operator + sep); - sb.append("GLOBAL I_ROW " + (comboSearchOrb.getSelectedIndex()) + sep); - sb.append("GLOBAL I_COLUMN " + (comboSearchOrb2.getSelectedIndex()) - + sep); + labelOrb1 = "ROW"; + orb2 = comboSearchOrb2; + labelOrb2 = "COLUMN"; + postAddGlobalI(sb, "OPERATOR", operator, null); + postAddGlobalI(sb, "BAS_1", 1, comboBasis1); break; case KEYWD_BAS1BAS2: - sb.append("GLOBAL I_BAS_1 " + (comboBasis.getSelectedIndex() + 1) + sep); - sb.append("GLOBAL I_BAS_2 " + (comboBasis2.getSelectedIndex() + 1) + sep); - sb.append("GLOBAL I_ROW " + (comboSearchOrb.getSelectedIndex()) + sep); - sb.append("GLOBAL I_COLUMN " + (comboSearchOrb2.getSelectedIndex()) - + sep); + labelOrb1 = "ROW"; + orb2 = comboSearchOrb2; + labelOrb2 = "COLUMN"; + postAddGlobalI(sb, "BAS_1", 1, comboBasis1); + postAddGlobalI(sb, "BAS_2", 1, comboBasis2); break; } - sb.append("GLOBAL I_OPT_" + keyProp + " " + op); + boolean isOK = (orb1 == null || orb1.getSelectedIndex() > 0) + && (orb2 == null || orb2.getSelectedIndex() > 0); + if (!isOK) + return; + if (orb1 != null) + postAddGlobalI(sb, labelOrb1, offset1, orb1); + if (orb2 != null) + postAddGlobalI(sb, labelOrb2, offset2, orb1); + if (atom1 != null) + postAddGlobalI(sb, labelAtom1, 1, atom1); + if (atom2 != null) + postAddGlobalI(sb, labelAtom2, 1, atom2); + if (unit1 != null) + postAddGlobalI(sb, labelUnit1, 1, unit1); + postAddGlobalI(sb, "OPT_" + keyProp, op, null); + + + // + // switch (searchKeywordNumber) { + // case KEYWD_NPA: + // sb.append("GLOBAL I_ATOM_1 " + (comboAtom1.getSelectedIndex() + 1) + sep); + // sb.append("GLOBAL I_UNIT_1 " + (comboUnit1.getSelectedIndex() + 1) + sep); + // sb.append("GLOBAL I_ORB_1 " + (comboSearchOrb2.getSelectedIndex()) + sep); + // if (op > 10) { + // isLabel = true; + // op = 12; + // } + // break; + // case KEYWD_NBO: + // case KEYWD_BEND: + // case KEYWD_NLMO: + // sb.append("GLOBAL I_ORB_1 " + (comboSearchOrb1.getSelectedIndex()) + sep); + // break; + // case KEYWD_E2PERT: + // sb.append("GLOBAL I_d_NBO_1 " + (comboSearchOrb1.getSelectedIndex()) + // + sep); + // sb.append("GLOBAL I_a_NBO " + // + (comboSearchOrb2.getSelectedIndex() + // + comboSearchOrb1.getModel().getSize() + 1) + sep); + // sb.append("GLOBAL I_UNIT_1 " + (comboUnit1.getSelectedIndex() + 1) + sep); + // break; + // case KEYWD_NRT: + // sb.append("GLOBAL I_ATOM_1 " + (comboAtom1.getSelectedIndex() + 1) + sep); + // sb.append("GLOBAL I_ATOM_2 " + (comboAtom2.getSelectedIndex() + 1) + sep); + // sb.append("GLOBAL I_RES_STR " + (comboUnit1.getSelectedIndex() + 1) + sep); + // isLabel = (op == 9); + // isLabelBonds = (op == 10); + // break; + // case KEYWD_STERIC: + // sb.append("GLOBAL I_d_NBO_1 " + (comboSearchOrb1.getSelectedIndex()) + // + sep); + // sb.append("GLOBAL I_d_NBO_2 " + (comboSearchOrb2.getSelectedIndex()) + // + sep); + // sb.append("GLOBAL I_UNIT_1 " + (comboUnit1.getSelectedIndex() + 1) + sep); + // break; + // case KEYWD_CMO: + // sb.append("GLOBAL I_CMO " + (comboSearchOrb2.getSelectedIndex()) + sep); + // sb.append("GLOBAL I_NBO " + (comboSearchOrb1.getSelectedIndex()) + sep); + // break; + // case KEYWD_DIPOLE: + // sb.append("GLOBAL I_ORB_1 " + (comboSearchOrb1.getSelectedIndex()) + sep); + // sb.append("GLOBAL I_UNIT_1 " + (comboUnit1.getSelectedIndex() + 1) + sep); + // break; + // case KEYWD_OPBAS: + // sb.append("GLOBAL I_BAS_1 " + (comboBasis.getSelectedIndex() + 1) + sep); + // sb.append("GLOBAL I_OPERATOR " + operator + sep); + // sb.append("GLOBAL I_ROW " + (comboSearchOrb1.getSelectedIndex()) + sep); + // sb.append("GLOBAL I_COLUMN " + (comboSearchOrb2.getSelectedIndex()) + sep); + // break; + // case KEYWD_BAS1BAS2: + // sb.append("GLOBAL I_BAS_1 " + (comboBasis.getSelectedIndex() + 1) + sep); + // sb.append("GLOBAL I_BAS_2 " + (comboBasis2.getSelectedIndex() + 1) + sep); + // sb.append("GLOBAL I_ROW " + (comboSearchOrb1.getSelectedIndex()) + sep); + // sb.append("GLOBAL I_COLUMN " + (comboSearchOrb2.getSelectedIndex()) + sep); + // break; + // } + + if (relabel) { + runScriptQueued("select add {*}.bonds; color bonds lightgrey; select none; measurements off"); + showAtomNums(alphaSpin.isSelected()); + relabel = false; + } if (isLabel) { relabel = true; postNBO_s(sb, NBOService.MODE_SEARCH_LABEL, null, "Getting labels"); @@ -1004,13 +1075,12 @@ relabel = true; nBonds = 0; //runScriptQueued("select {*};label off;select remove {*}"); - runScriptQueued("select add {*}.bonds; color bonds [170,170,170]; select remove {*}"); + runScriptQueued("select add {*}.bonds; color bonds [170,170,170]; select none"); postNBO_s(sb, NBOService.MODE_SEARCH_LABEL_BONDS, null, "Getting bonds list"); } else { postNBO_s(sb, NBOService.MODE_SEARCH_VALUE, null, "Getting value..."); } - } private boolean secondPick = true; @@ -1020,54 +1090,55 @@ * numbering of second list offset by length of first -NPA, STERIC, DIPOLE: * checks for more than 1 unit -NRT: gets res structure info * - * @param list + * @param cb */ - @SuppressWarnings("fallthrough") - protected void processReturnedSearchList(AbstractListModel<String> list) { + protected void processReturnedSearchList(JComboBox<String> cb) { + DefaultComboBoxModel<String> list = (DefaultComboBoxModel<String>) cb.getModel(); switch (searchKeywordNumber) { case KEYWD_E2PERT: - if (list.equals(list2)) { + if (cb == comboSearchOrb2) { //Relabel a-nbo to correct orbital number - int offset = list1.getSize() - 1; // list includes "<select an orbital>" - int sz = list2.getSize(); + int offset = comboSearchOrb1.getModel().getSize() - 1; // list includes "<select an orbital>" + int sz = cb.getModel().getSize(); comboSearchOrb2.setEnabled(false); // ActionListener listener = comboSearchOrb2.getActionListeners()[0]; // comboSearchOrb2.removeActionListener(listener); for (int i = 1; i < sz; i++) { - String s = list2.getElementAt(i); - list2.removeElementAt(i); + String s = list.getElementAt(i); + list.removeElementAt(i); s = " " + (offset + i) + s.substring(s.indexOf(".")); - list2.insertElementAt(s, i); + list.insertElementAt(s, i); } comboSearchOrb2.setEnabled(true); // comboSearchOrb2.addActionListener(listener); } + break; case KEYWD_NPA: case KEYWD_STERIC: case KEYWD_DIPOLE: - if (list.equals(list3)) - if (list3.getSize() == 1) { - comboUnit.setVisible(false); + if (cb == comboUnit1) + if (list.getSize() == 1) { + comboUnit1.setVisible(false); unitLabel.setVisible(true); - unitLabel.setText(list3.getElementAt(0).substring(6)); // "unit:" + unitLabel.setText(list.getElementAt(0).substring(6)); // "unit:" } else { unitLabel.setVisible(false); - comboUnit.setVisible(true); + comboUnit1.setVisible(true); } break; case KEYWD_NRT: - if (list.equals(list3)) { + if (cb == comboUnit1) { changeKey(nrt); //Parsing RS list here ensures RS list will be in .nbo file inputFileHandler.parseRSList(); - comboUnit.addActionListener(new ActionListener() { + comboUnit1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (isOpenShell) - setResStruct(comboUnit.getSelectedIndex() + 1, + setResStruct(comboUnit1.getSelectedIndex() + 1, alphaSpin.isSelected()); else - setResStruct(comboUnit.getSelectedIndex() + 1, true); + setResStruct(comboUnit1.getSelectedIndex() + 1, true); } }); setResStruct(1, alphaSpin.isSelected()); @@ -1075,9 +1146,9 @@ break; case KEYWD_OPBAS: case KEYWD_BAS1BAS2: - if (list.equals(list2)) { + if (cb == comboBasis2) { //setComboSearchOrbsActionForB1B2(); - comboSearchOrb.setSelectedIndex(0); + comboSearchOrb1.setSelectedIndex(0); comboSearchOrb2.setSelectedIndex(0); } @@ -1166,16 +1237,14 @@ sb.append("<sup>(" + lp + ")</sup>"); sb.append("%a"); int charge = vwr.ms.at[i - 1].getFormalCharge(); - if (charge != 0) - sb.append("<sup>" + ((charge > 0) ? "+" : "") + charge + "</sup>;"); - else - sb.append(";"); + sb.append("<sup>" + Math.abs(charge) + (charge > 0 ? "+" : charge < 0 ? "-" : "") + "</sup>"); + sb.append(";"); } runScriptQueued(sb.toString()); runScriptQueued("select remove{*}; " + "select add (atomno=" - + (comboAtom1.getSelectedIndex() + 1) + ");" + "select add (atomno=" - + (comboAtom2.getSelectedIndex() + 1) + ");"); + + (comboAtom1.getSelectedIndex()) + ");" + "select add (atomno=" + + (comboAtom2.getSelectedIndex()) + ");"); } @@ -1260,6 +1329,7 @@ * either a single number or * ["bond","1 3 O1 #1 -- C2 #2 1.171168",0.0,0.0,0.58555] as a String */ + @SuppressWarnings("unchecked") protected void notifyPick_s(String atomnoOrBondInfo) { runScriptNow("isosurface delete"); String[] tok = atomnoOrBondInfo.split(","); @@ -1270,10 +1340,10 @@ case KEYWD_BEND: case KEYWD_NLMO: case KEYWD_E2PERT: - showOrbital(findNextAtomicOrbital(atomnoOrBondInfo, list1)); + showOrbital(findNextAtomicOrbital(atomnoOrBondInfo, (AbstractListModel<String>) comboSearchOrb1.getModel())); return; case KEYWD_CMO: - showOrbital(findNextAtomicOrbital(atomnoOrBondInfo, list2)); + showOrbital(findNextAtomicOrbital(atomnoOrBondInfo, (AbstractListModel<String>) comboSearchOrb2.getModel())); return; case KEYWD_NPA: case KEYWD_NRT: @@ -1283,17 +1353,16 @@ case KEYWD_BAS1BAS2: break; } - int atomIndex = n - 1; if (comboAtom1 != null && comboAtom2 == null) { - comboAtom1.setSelectedIndex(atomIndex); + comboAtom1.setSelectedIndex(n); if (rbSelection < 3 && rbSelection > -1) rBtns[rbSelection].doClick(); } else if (comboAtom1 != null && comboAtom2 != null) { secondPick = !secondPick; if (secondPick) - comboAtom2.setSelectedIndex(atomIndex); + comboAtom2.setSelectedIndex(n); else - comboAtom1.setSelectedIndex(atomIndex); + comboAtom1.setSelectedIndex(n); } return; } @@ -1305,17 +1374,17 @@ case KEYWD_NLMO: case KEYWD_DIPOLE: case KEYWD_CMO: - comboSearchOrb.setSelectedIndex(pickNBO_s(at1, at2, list1)); + comboSearchOrb1.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb1)); break; case KEYWD_BEND: - comboSearchOrb.setSelectedIndex(pickNHO_s(at1, at2, list1)); + comboSearchOrb1.setSelectedIndex(pickNHO_s(at1, at2, comboSearchOrb1)); break; case KEYWD_NRT: tok = atomnoOrBondInfo.split(","); int a1 = Integer.parseInt(at1.replaceAll("[\\D]", "")); int a2 = Integer.parseInt(at2.replaceAll("[\\D]", "")); - this.comboAtom1.setSelectedIndex(a1 - 1); - this.comboAtom2.setSelectedIndex(a2 - 1); + this.comboAtom1.setSelectedIndex(a1); + this.comboAtom2.setSelectedIndex(a2); if (rbSelection > 2 && rbSelection < 6) rBtns[rbSelection].doClick(); return; @@ -1324,25 +1393,25 @@ tok = atomnoOrBondInfo.split(","); tok2 = tok[1].split(" "); String bond = tok2[2] + "-" + tok2[5]; - String str = comboSearchOrb.getSelectedItem().toString().replace(" ", ""); + String str = comboSearchOrb1.getSelectedItem().toString().replace(" ", ""); if (str.contains(bond)) { - comboSearchOrb.setSelectedIndex(pickNBO_s(at1, at2, list1)); + comboSearchOrb1.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb1)); return; } str = comboSearchOrb2.getSelectedItem().toString().replace(" ", ""); if (str.contains(bond)) { - comboSearchOrb2.setSelectedIndex(pickNBO_s(at1, at2, list2)); + comboSearchOrb2.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb2)); return; } secondPick = !secondPick; if (secondPick) - comboSearchOrb2.setSelectedIndex(pickNBO_s(at1, at2, list2)); + comboSearchOrb2.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb2)); else - comboSearchOrb.setSelectedIndex(pickNBO_s(at1, at2, list1)); + comboSearchOrb1.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb1)); break; case KEYWD_OPBAS: case KEYWD_BAS1BAS2: - JComboBox<String> tmpBas = comboBasis; + JComboBox<String> tmpBas = comboBasis1; if (searchKeywordNumber == KEYWD_BAS1BAS2) { if (!secondPick) tmpBas = comboBasis2; @@ -1359,30 +1428,30 @@ case BASIS_NHO: secondPick = !secondPick; if (secondPick) - comboSearchOrb2.setSelectedIndex(pickNHO_s(at1, at2, list2)); + comboSearchOrb2.setSelectedIndex(pickNHO_s(at1, at2, comboSearchOrb2)); else - comboSearchOrb.setSelectedIndex(pickNHO_s(at1, at2, list1)); + comboSearchOrb1.setSelectedIndex(pickNHO_s(at1, at2, comboSearchOrb1)); break; case BASIS_PNBO: case BASIS_NBO: case BASIS_PNLMO: case BASIS_NLMO: bond = at1 + "-" + at2; - str = comboSearchOrb.getSelectedItem().toString().replace(" ", ""); + str = comboSearchOrb1.getSelectedItem().toString().replace(" ", ""); if (str.contains(bond)) { - comboSearchOrb.setSelectedIndex(pickNBO_s(at1, at2, list1)); + comboSearchOrb1.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb1)); return; } str = comboSearchOrb2.getSelectedItem().toString().replace(" ", ""); if (str.contains(bond)) { - comboSearchOrb2.setSelectedIndex(pickNBO_s(at1, at2, list2)); + comboSearchOrb2.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb2)); return; } secondPick = !secondPick; if (secondPick) - comboSearchOrb2.setSelectedIndex(pickNBO_s(at1, at2, list2)); + comboSearchOrb2.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb2)); else - comboSearchOrb.setSelectedIndex(pickNBO_s(at1, at2, list1)); + comboSearchOrb1.setSelectedIndex(pickNBO_s(at1, at2, comboSearchOrb1)); break; } } @@ -1393,12 +1462,12 @@ * * @param at1 * @param at2 - * @param list + * @param cb * @return the orbital index, one-based */ private int pickNBO_s(String at1, String at2, - DefaultComboBoxModel<String> list) { - return selectOnOrb_s(at1 + "-" + at2, null, list); + JComboBox<String> cb) { + return selectOnOrb_s(at1 + "-" + at2, null, cb); } /** @@ -1406,12 +1475,11 @@ * * @param at1 * @param at2 - * @param list + * @param cb * @return the orbital index, one-based */ - private int pickNHO_s(String at1, String at2, - DefaultComboBoxModel<String> list) { - return selectOnOrb_s(at1 + "(" + at2 + ")", at2 + "(" + at1 + ")", list); + private int pickNHO_s(String at1, String at2, JComboBox<String> cb) { + return selectOnOrb_s(at1 + "(" + at2 + ")", at2 + "(" + at1 + ")", cb); } /** @@ -1420,11 +1488,11 @@ * * @param b1 * @param b2 - * @param list + * @param cb * @return an orbital index -- one-based */ - protected int selectOnOrb_s(String b1, String b2, - DefaultComboBoxModel<String> list) { + protected int selectOnOrb_s(String b1, String b2, JComboBox<String> cb) { + DefaultComboBoxModel<String> list = (DefaultComboBoxModel<String>) cb.getModel(); int curr = 0, size = list.getSize(); if (currOrb.contains(b1)) curr = list.getIndexOf(list.getSelectedItem()) - 1; @@ -1485,9 +1553,7 @@ ////////////////////////// SEARCH POSTS TO NBO /////////////////// - private void postListRequest(String get, DefaultComboBoxModel<String> list) { - - list.removeAllElements(); + private void postListRequest(String get, JComboBox<String> cb) { int mode = NBOService.MODE_SEARCH_LIST; SB sb = getMetaHeader(false); String cmd; @@ -1495,7 +1561,7 @@ if (metaKey >= KEYWD_OPBAS) { cmd = "o"; JComboBox<String> tmpBas = ((get.startsWith("c") && metaKey == KEYWD_BAS1BAS2) ? comboBasis2 - : comboBasis); + : comboBasis1); switch (tmpBas.getSelectedIndex()) { case BASIS_AO: case BASIS_PNAO: @@ -1518,16 +1584,16 @@ cmd = "c"; metaKey = 8; } - sb.append("GLOBAL I_BAS_1 " + (tmpBas.getSelectedIndex() + 1) + sep); + postAddGlobalI(sb, "BAS_1", 1, tmpBas); } else { - sb.append("GLOBAL I_BAS_1 " + (comboBasis.getSelectedIndex() + 1) + sep); + postAddGlobalI(sb, "BAS_1", 1, comboBasis1); cmd = get.split(" ")[0]; } - sb.append("GLOBAL I_KEYWORD " + metaKey + sep); - sb.append("CMD " + cmd); + postAddGlobalI(sb, "KEYWORD", metaKey, null); + postAddCmd(sb, cmd); if (get.equals("c") && searchKeywordNumber == KEYWD_CMO) mode = NBOService.MODE_SEARCH_LIST_MO; - postNBO_s(sb, mode, list, "Getting list " + cmd); + postNBO_s(sb, mode, cb, "Getting list " + cmd); } /** @@ -1537,18 +1603,18 @@ * command data * @param mode * type of request - * @param list - * optional list to fill + * @param cb + * optional JComboBox to fill * @param statusMessage */ private void postNBO_s(SB sb, final int mode, - final DefaultComboBoxModel<String> list, + final JComboBox<String> cb, String statusMessage) { final NBORequest req = new NBORequest(); req.set(new Runnable() { @Override public void run() { - processNBO_s(req, mode, list); + processNBO_s(req, mode, cb); } }, statusMessage, "s_cmd.txt", sb.toString()); nboService.postToNBO(req); @@ -1563,12 +1629,13 @@ * * @param req * @param mode - * @param list + * @param cb */ protected void processNBO_s(NBORequest req, int mode, - DefaultComboBoxModel<String> list) { + JComboBox<String> cb) { String[] lines = req.getReplyLines(); String line; + DefaultComboBoxModel<String> list; switch (mode) { case NBOService.MODE_SEARCH_VALUE: line = lines[0]; @@ -1582,15 +1649,19 @@ showMax(line); break; case NBOService.MODE_SEARCH_LIST: + list = (DefaultComboBoxModel<String>)cb.getModel(); list.removeAllElements(); - if (list != list3) + if (cb == comboAtom1 || cb == comboAtom2) + list.addElement("<select an atom>"); + else if (cb == comboSearchOrb1 || cb == comboSearchOrb2) list.addElement("<select an orbital>"); for (int i = 0; i < lines.length; i++) { list.addElement(lines[i]); } - processReturnedSearchList(list); + processReturnedSearchList(cb); break; case NBOService.MODE_SEARCH_LIST_MO: + list = (DefaultComboBoxModel<String>)cb.getModel(); for (int i = 0; i < lines.length; i++) list.addElement(" " + PT.rep(PT.rep(lines[i], "MO ", ""), " ", ". ")); break; Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-04 23:33:50 UTC (rev 21389) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-05 13:05:22 UTC (rev 21390) @@ -99,7 +99,7 @@ // protected String vectorDef, planeDef; protected DefaultListModel<String> alphaList, betaList; - protected JComboBox<String> comboBasis; + protected JComboBox<String> comboBasis1; protected JRadioButton alphaSpin, betaSpin; private JRadioButton atomOrient; @@ -275,11 +275,11 @@ private Component createSelectOrbitalBox() { Box horizBox = Box.createHorizontalBox(); alphaList = betaList = null; - comboBasis = new JComboBox<String>(basSet); - comboBasis.setMaximumSize(new Dimension(70, 25)); - comboBasis.setUI(new StyledComboBoxUI(180, -1)); - horizBox.add(comboBasis); - comboBasis.addActionListener(new ActionListener() { + comboBasis1 = new JComboBox<String>(basSet); + comboBasis1.setMaximumSize(new Dimension(70, 25)); + comboBasis1.setUI(new StyledComboBoxUI(180, -1)); + horizBox.add(comboBasis1); + comboBasis1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { EventQueue.invokeLater(new Runnable() { @@ -359,7 +359,7 @@ orbPanel.setAlignmentX(0.0f); orbPanel.add(new JLabel( - "click to turn up to 9 orbitals on/off; dbl-click to reverse phase"), + "click to turn up to 9 orbitals on/off; hold to reverse phase"), BorderLayout.SOUTH); newOrbitals(); return orbPanel; @@ -376,7 +376,7 @@ */ protected File ensurePlotFile(int fileNum) { if (fileNum == 0) - fileNum = 31 + comboBasis.getSelectedIndex(); + fileNum = 31 + comboBasis1.getSelectedIndex(); File f = inputFileHandler.newNBOFileForExt("" + fileNum); if (!f.exists() || f.length() == 0) { runGenNBOJob("PLOT"); @@ -928,7 +928,7 @@ runScriptNow("isosurface delete"); - if (comboBasis.getSelectedIndex() == BASIS_MO) { + if (comboBasis1.getSelectedIndex() == BASIS_MO) { file47Keywords = cleanNBOKeylist(inputFileHandler.read47File()[1], true); if (!file47Keywords.contains("CMO")) { runGenNBOJob("CMO"); @@ -961,8 +961,8 @@ alphaList = list; if (!jmolOptionNONBO) { - logCmd("select " + comboBasis.getSelectedItem() + " " + (isBeta ? "beta" : isOpenShell ? "alpha" : "")); - postNBO_v(getMetaHeader(true).append("CMD LABEL"), NBOService.MODE_VIEW_LIST, + logCmd("select " + comboBasis1.getSelectedItem() + " " + (isBeta ? "beta" : isOpenShell ? "alpha" : "")); + postNBO_v(postAddCmd(getMetaHeader(true), "LABEL"), NBOService.MODE_VIEW_LIST, list, "Getting list", null, null); } loadModelFileQueued( @@ -986,14 +986,11 @@ */ protected SB getMetaHeader(boolean addBasis) { SB sb = new SB(); - sb.append("GLOBAL C_PATH " + inputFileHandler.inputFile.getParent() + sep); - sb.append("GLOBAL C_JOBSTEM " + inputFileHandler.jobStem + sep); + postAddGlobalC(sb, "PATH", inputFileHandler.inputFile.getParent()); + postAddGlobalC(sb, "JOBSTEM", inputFileHandler.jobStem); if (addBasis) - sb.append("GLOBAL I_BAS_1 " + (comboBasis.getSelectedIndex() + 1) + sep); - if (isOpenShell) - sb.append("GLOBAL I_SPIN " + (alphaSpin.isSelected() ? "1" : "-1") + sep); - else - sb.append("GLOBAL I_SPIN 0" + sep); + postAddGlobalI(sb, "BAS_1", 1, comboBasis1); + postAddGlobalI(sb, "SPIN", (!isOpenShell ? 0 : alphaSpin.isSelected() ? 1 : -1), null); return sb; } @@ -1004,10 +1001,7 @@ */ private void appendCameraParams(SB sb) { for (int i = 0; i < camFields.length; i++) - if (!camFields[i].getText().equals(camVal[i])) { - camVal[i] = camFields[i].getText(); - sb.append("GLOBAL CAMERA_" + camFieldIDs[i] + " " + camVal[i] + sep); - } + postAddGlobalT(sb,"CAMERA_" + camFieldIDs[i], camFields[i]); } /** @@ -1017,10 +1011,7 @@ * @param i */ private void appendOrbitalPhaseSign(SB sb, int i) { - if (orbitals.bsNeg.get(i)) - sb.append("GLOBAL SIGN -1" + sep); - else - sb.append("GLOBAL SIGN +1" + sep); + postAddGlobal(sb, "SIGN", (orbitals.bsNeg.get(i) ? "-1" : "+1")); } //contour/profile selected orbital in orbital list @@ -1049,48 +1040,26 @@ appendPlaneParams(sb); } appendOrbitalPhaseSign(sb, ind); - String msg = (oneD ? "Profile " : "Contour ") + (ind + 1); - logCmd(msg); - sb.append("CMD ").append(msg).append(sep); - appendOrbitalPhaseSign(sb, ind); - + String cmd = (oneD ? "Profile " : "Contour ") + (ind + 1); + logCmd(cmd); + postAddCmd(sb, cmd); postNBO_v(sb, NBOService.MODE_VIEW_IMAGE, null, (oneD ? "Profiling.." : "Contouring.."), null, null); } private void appendLineParams(SB sb) { for (int i = 0; i < lineFields.length; i++) - if (!lineVal[i].equals(lineFields[i].getText())) { - lineVal[i] = lineFields[i].getText(); - sb.append("GLOBAL LINES_" + (char) ('a' + i) + " " + lineVal[i] + sep); - } + postAddGlobalT(sb, "LINES_" + (char) ('a' + i), lineFields[i]); } private void appendVectorParams(SB sb) { - //vector definitions included every time - sb.append("GLOBAL VECTOR_a " + (vectorFields[0].getText()) + sep); - sb.append("GLOBAL VECTOR_b " + (vectorFields[1].getText()) + sep); - //other variables only included as needed - for (int i = 2; i < vectorFields.length; i++) - if (!vecVal[i].equals(vectorFields[i].getText())) { - vecVal[i] = vectorFields[i].getText(); - sb.append("GLOBAL VECTOR_" + (char) ('a' + i) + " " - + (vectorFields[i].getText()) + sep); - } + for (int i = 0; i < vectorFields.length; i++) + postAddGlobalT(sb, "VECTOR_" + (char) ('a' + i), vectorFields[i]); } private void appendPlaneParams(SB sb) { - //Plane definitions included every time - sb.append("GLOBAL PLANE_a " + (planeFields[0].getText()) + sep); - sb.append("GLOBAL PLANE_b " + (planeFields[1].getText()) + sep); - sb.append("GLOBAL PLANE_c " + (planeFields[2].getText()) + sep); - //other variables only included if changed - for (int i = 3; i < planeFields.length; i++) - if (!plVal[i].equals(planeFields[i].getText())) { - plVal[i] = planeFields[i].getText(); - sb.append("GLOBAL PLANE_" + (char) ('a' + i) + " " - + (planeFields[i].getText()) + sep); - } + for (int i = 0; i < planeFields.length; i++) + postAddGlobalT(sb, "PLANE_" + (char) ('a' + i), planeFields[i]); } private void setJmolView(boolean is2D) { @@ -1110,9 +1079,9 @@ // I do not understand why a LABEL command has to be given here. A bug? - postNBO_v(getMetaHeader(true).append("CMD LABEL"), NBOService.MODE_RAW, null, "", "jview.txt", sb.toString()); + postNBO_v(postAddCmd(getMetaHeader(true), "LABEL"), NBOService.MODE_RAW, null, "", "jview.txt", sb.toString()); - postNBO_v(new SB().append("CMD JVIEW"), NBOService.MODE_RAW, null, + postNBO_v(postAddCmd(new SB(), "JVIEW"), NBOService.MODE_RAW, null, "Sending Jmol orientation", null, null); // sb = getMetaHeader(true); @@ -1135,11 +1104,7 @@ .nextSetBit(i + 1)) { sb = getMetaHeader(true); appendOrbitalPhaseSign(sb, i); - if (oneD) - sb.append("CMD PROFILE " + (i + 1) + sep); - else - sb.append("CMD CONTOUR " + (i + 1) + sep); - + postAddCmd(sb, (oneD ? "PROFILE" : "CONTOUR") + (i + 1)); msg += " " + (i + 1); profileList += " " + (++pt); postNBO_v(sb, NBOService.MODE_RAW, null, "Sending " + msg, null, null); @@ -1147,7 +1112,7 @@ logCmd(msg); sb = getMetaHeader(false); appendLineParams(sb); - sb.append("CMD DRAW" + profileList); + postAddCmd(sb, "DRAW" + profileList); postNBO_v(sb, NBOService.MODE_VIEW_IMAGE, null, "Drawing...", null, null); } @@ -1159,7 +1124,7 @@ for (int pt = 0, i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { sb = getMetaHeader(true); appendOrbitalPhaseSign(sb, i); - sb.append("CMD PROFILE " + (i + 1) + sep); + postAddCmd(sb, "PROFILE " + (i + 1)); postNBO_v(sb, NBOService.MODE_RAW, null, "Sending profile " + (i + 1), null, null); tmp += " " + (i + 1); @@ -1169,7 +1134,7 @@ String jviewData = sb.toString(); sb = getMetaHeader(false); appendCameraParams(sb); - sb.append("CMD VIEW" + list); + postAddCmd(sb, "VIEW" + list); postNBO_v(sb, NBOService.MODE_VIEW_IMAGE, null, "Raytracing...", null, jviewData); } @@ -1215,7 +1180,7 @@ tok = tok[1].split(" "); String at1 = tok[2]; String at2 = tok[5]; - switch (comboBasis.getSelectedIndex()) { + switch (comboBasis1.getSelectedIndex()) { case BASIS_AO: case BASIS_PNAO: case BASIS_NAO: @@ -1319,7 +1284,7 @@ Map<String, Object> moData = (Map<String, Object>) vwr .getCurrentModelAuxInfo().get("moData"); - String type = comboBasis.getSelectedItem().toString(); + String type = comboBasis1.getSelectedItem().toString(); if (type.charAt(0) == 'P') type = type.substring(1); boolean isBeta = isOpenShell && !alphaSpin.isSelected() && betaList != null; @@ -1374,10 +1339,10 @@ } protected void setViewerBasis() { - if (comboBasis.getSelectedIndex() != BASIS_MO) - comboBasis.setSelectedIndex(BASIS_PNBO); + if (comboBasis1.getSelectedIndex() != BASIS_MO) + comboBasis1.setSelectedIndex(BASIS_PNBO); else - comboBasis.setSelectedIndex(BASIS_MO); + comboBasis1.setSelectedIndex(BASIS_MO); } /** @@ -1547,7 +1512,7 @@ protected void updateIsosurfacesInJmol(int iClicked) { DefaultListModel<String> model = (DefaultListModel<String>) getModel(); boolean isBeta = betaSpin.isSelected(); - String type = comboBasis.getSelectedItem().toString(); + String type = comboBasis1.getSelectedItem().toString(); String script = "select visible;"; if (iClicked == Integer.MAX_VALUE) script += updateBitSetFromModel(); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2017-02-04 23:33:50 UTC (rev 21389) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2017-02-05 13:05:22 UTC (rev 21390) @@ -45,30 +45,43 @@ * * acknowledgments: Grange Hermitage, Frank Weinhold * + * + * upgrade to NBO 6 allows reading of resonance structures, including base structure + * + * * @author hansonr **/ -/* - * NBO output analysis is based on - * - * ********************************** NBO 5.G - * *********************************** N A T U R A L A T O M I C O R B I T A L A - * N D N A T U R A L B O N D O R B I T A L A N A L Y S I S - * *********************** - * ******************************************************* (c) Copyright - * 1996-2004 Board of Regents of the University of Wisconsin System on behalf of - * the Theoretical Chemistry Institute. All Rights Reserved. - * - * Cite this program as: - * - * NBO 5.G. E. D. Glendening, J. K. Badenhoop, A. E. Reed, J. E. Carpenter, J. - * A. Bohmann, C. M. Morales, and F. Weinhold (Theoretical Chemistry Institute, - * University of Wisconsin, Madison, WI, 2001); http://www.chem.wisc.edu/~nbo5 - * - * /AONBO / : Print the AO to NBO transformation - */ + public class GenNBOReader extends MOReader { + +// +// *********************************** NBO 6.0 *********************************** +// N A T U R A L A T O M I C O R B I T A L A N D +// N A T U R A L B O N D O R B I T A L A N A L Y S I S +// **************************** Robert Hanson (100634) *************************** +// (c) Copyright 1996-2014 Board of Regents of the University of Wisconsin System +// on behalf of the Theoretical Chemistry Institute. All rights reserved. +// +// Cite this program as: +// +// NBO 6.0. E. D. Glendening, J. K. Badenhoop, A. E. Reed, +// J. E. Carpenter, J. A. Bohmann, C. M. Morales, C. R. Landis, +// and F. Weinhold (Theoretical Chemistry Institute, University +// of Wisconsin, Madison, WI, 2013); http://nbo6.chem.wisc.edu/ +// +// /NLMO / : Form natural localized molecular orbitals +// /NRT / : Natural Resonance Theory Analysis +// /AOPNAO / : Print the AO to PNAO transformation +// /SAO / : Print the AO overlap matrix +// /STERIC / : Print NBO/NLMO steric analysis +// /CMO / : Print analysis of canonical MOs +// /PLOT / : Write information for the orbital plotter +// /FILE / : Set to co2_p +// +// Filename set to co2_p + private boolean isOutputFile; private String nboType = ""; private int nOrbitals0; @@ -94,6 +107,8 @@ * molname.41 AO density matrix * molname.46 Basis label file * molname.47 archive file + * molname.nbo output file + * */ String line1 = rd().trim(); isArchive = (line1.indexOf("$GENNBO") >= 0 || line1.indexOf("$NBO") >= 0); // GENNBO 6 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-02-05 23:59:21
|
Revision: 21395 http://sourceforge.net/p/jmol/code/21395 Author: hansonr Date: 2017-02-05 23:59:18 +0000 (Sun, 05 Feb 2017) Log Message: ----------- Final NBO update for today -- more efficient retrieval of NBO resonance structures from .nbo files adds NBOParser class Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOFileHandler.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-05 23:01:11 UTC (rev 21394) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-05 23:59:18 UTC (rev 21395) @@ -243,7 +243,6 @@ protected NBOFileHandler inputFileHandler; protected NBOFileHandler saveFileHandler; protected int dialogMode; - protected boolean isOpenShell; protected boolean isJmolNBO; protected boolean haveService; @@ -997,6 +996,10 @@ runScriptQueued(sb.toString()); } + protected boolean isOpenShell() { + return inputFileHandler.isOpenShell; + } + } Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-05 23:01:11 UTC (rev 21394) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-05 23:59:18 UTC (rev 21395) @@ -592,7 +592,7 @@ case KEYWD_NRT: runScriptNow("set bondpicking true"); keyProp = "NRT"; - if (isOpenShell) + if (isOpenShell()) setKeyword("s a a' rs".split(" "), new String[] { "Spin: ", "Atom A: ", "Atom A': ", "Res Struct: " }); else @@ -764,7 +764,7 @@ doSetBasis(); } }); - if (isOpenShell) { + if (isOpenShell()) { //b.add(Box.createRigidArea(new Dimension(20,0))); b.add(alphaSpin); b.add(betaSpin); @@ -1413,7 +1413,7 @@ rbSelection = -1; setStructure("alpha"); - if (isOpenShell) { + if (isOpenShell()) { alphaSpin.setVisible(true); betaSpin.setVisible(true); } else { @@ -1531,7 +1531,7 @@ switch (mode) { case NBOService.MODE_SEARCH_VALUE: line = lines[0]; - if (isOpenShell) { + if (isOpenShell()) { String spin = (alphaSpin.isSelected() ? "↑" : "↓"); int ind = line.indexOf(')') + 1; line = line.substring(0, ind) + spin + line.substring(ind); Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-05 23:01:11 UTC (rev 21394) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-05 23:59:18 UTC (rev 21395) @@ -339,8 +339,8 @@ }); horizBox.add(alphaSpin); horizBox.add(betaSpin); - alphaSpin.setVisible(isOpenShell); - betaSpin.setVisible(isOpenShell); + alphaSpin.setVisible(isOpenShell()); + betaSpin.setVisible(isOpenShell()); horizBox.add(new HelpBtn("view_orbital_help.htm")); return horizBox; } @@ -945,7 +945,7 @@ return; } - boolean isBeta = isOpenShell && !alphaSpin.isSelected(); + boolean isBeta = isOpenShell() && !alphaSpin.isSelected(); DefaultListModel<String> list = (isBeta ? betaList : alphaList); if (list != null && list.size() > 0) { @@ -959,7 +959,7 @@ alphaList = list; if (!jmolOptionNONBO) { - logCmd("select " + comboBasis1.getSelectedItem() + " " + (isBeta ? "beta" : isOpenShell ? "alpha" : "")); + logCmd("select " + comboBasis1.getSelectedItem() + " " + (isBeta ? "beta" : isOpenShell() ? "alpha" : "")); postNBO_v(postAddCmd(getMetaHeader(true), "LABEL"), NBOService.MODE_VIEW_LIST, list, "Getting list", null, null); } @@ -988,7 +988,7 @@ postAddGlobalC(sb, "JOBSTEM", inputFileHandler.jobStem); if (addBasis) postAddGlobalI(sb, "BAS_1", 1, comboBasis1); - postAddGlobalI(sb, "SPIN", (!isOpenShell ? 0 : alphaSpin.isSelected() ? 1 : -1), null); + postAddGlobalI(sb, "SPIN", (!isOpenShell() ? 0 : alphaSpin.isSelected() ? 1 : -1), null); return sb; } @@ -1284,10 +1284,10 @@ String type = comboBasis1.getSelectedItem().toString(); if (type.charAt(0) == 'P') type = type.substring(1); - boolean isBeta = isOpenShell && !alphaSpin.isSelected() && betaList != null; + boolean isBeta = isOpenShell() && !alphaSpin.isSelected() && betaList != null; try { - alphaSpin.setVisible(isOpenShell); // old - betaSpin.setVisible(isOpenShell); // old + alphaSpin.setVisible(isOpenShell()); // old + betaSpin.setVisible(isOpenShell()); // old setDefaultParameterArrays(); Modified: trunk/Jmol/src/org/gennbo/NBOFileHandler.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOFileHandler.java 2017-02-05 23:01:11 UTC (rev 21394) +++ trunk/Jmol/src/org/gennbo/NBOFileHandler.java 2017-02-05 23:59:18 UTC (rev 21395) @@ -48,6 +48,7 @@ protected String useExt; protected NBODialog dialog; protected boolean canReRun; + protected boolean isOpenShell; private Lst<Object> structureList; @@ -165,6 +166,8 @@ protected boolean loadSelectedFile(File selectedFile) { dialog.nboService.restartIfNecessary(); inputFile = selectedFile; + structureList = null; + isOpenShell = false; //if(!useExt.equals("47")&&!useExt.equals("31")&&!useExt.equals("nbo")) //return false; if (dialog.dialogMode == NBODialogConfig.DIALOG_MODEL) @@ -193,7 +196,7 @@ protected void setInputFile(File inputFile) { dialog.logValue("Input file=" + inputFile); clearInputFile(false); // clear CURRENT input file's server directory - dialog.isOpenShell = false; + isOpenShell = false; this.inputFile = inputFile; if (inputFile.getName().indexOf(".") > 0) jobStem = getJobStem(inputFile); @@ -458,9 +461,12 @@ if (structureList == null) { NBOParser nboParser = new NBOParser(); structureList = nboParser.getAllStructures(getInputFile("nbo")); + isOpenShell = nboParser.isOpenShell(); } Map<String, Object> map = NBOParser.getStructureMap(structureList, type, index); - return (map == null ? null : NBOParser.setStructure(sb, dialog.vwr, map)); + boolean addCharge = false; // BH does not work. You cannot get charges just from + // counting bonds. + return (map == null ? null : NBOParser.setStructure(sb, dialog.vwr, map, addCharge)); } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java 2017-02-05 23:01:11 UTC (rev 21394) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java 2017-02-05 23:59:18 UTC (rev 21395) @@ -11,6 +11,9 @@ public class NBOParser { + private boolean haveBeta; + + public Lst<Object> getAllStructures(String output) { if (output == null) return null; @@ -45,6 +48,7 @@ */ public int getStructures(String output, String nrtType, Lst<Object> list) { + System.out.println(output); // $NRTSTRA // STR ! Wgt = 49.51% // LONE 1 2 3 2 END @@ -109,6 +113,8 @@ } htData.put("index", Integer.valueOf(index++)); htData.put("spin", spin = tok.toLowerCase()); + if (spin.equals("beta")) + haveBeta = true; htData.put("type", nrtType == null ? spin : nrtType); n++; break; @@ -148,6 +154,7 @@ } } } catch (Exception e) { + e.printStackTrace(); list.clear(); return -1; } @@ -170,11 +177,11 @@ if (type == null || structureList == null) return null; type = type.toLowerCase(); - String spin = (type.indexOf("a") >= 0 ? "alpha" : "beta"); + String spin = (type.indexOf("b") < 0 ? "alpha" : "beta"); for (int i = 0; i < structureList.size(); i++) { Map<String, Object> map = (Map<String, Object>) structureList.get(i); if (spin.equals(map.get("spin")) && type.equals(map.get("type")) - && (i < 0 || i == ((Integer) map.get("index")).intValue())) { + && (index < 0 || i == ((Integer) map.get("index")).intValue())) { return map; } } @@ -183,7 +190,8 @@ /** - * Starting with a structure map, do what needs to be done to change the current structure to that. + * Starting with a structure map, do what needs to be done to change the + * current structure to that. * * @param sb * @param vwr @@ -191,7 +199,7 @@ * @return a string that can be used to optionally label the atoms */ @SuppressWarnings("unchecked") - public static String setStructure(SB sb, Viewer vwr, Map<String, Object> map) { + public static String setStructure(SB sb, Viewer vwr, Map<String, Object> map, boolean addCharge) { if (map == null) return null; Lst<Object> bonds = (Lst<Object>) map.get("bond"); @@ -239,17 +247,24 @@ sb.append("select (atomindex=" + i + ");label "); if (lp[i] > 0) sb.append("<sup>(" + lp[i] + ")</sup>"); - if (lv[i]> 0) - sb.append("<sub>[" + lv[i] + "]</sub>"); + if (lv[i] > 0) + sb.append("<sub>[" + lv[i] + "]</sub>"); sb.append("%a"); - int charge = vwr.ms.at[i].getFormalCharge(); - if (charge != 0) - sb.append("<sup>" + Math.abs(charge) - + (charge > 0 ? "+" : charge < 0 ? "-" : "") + "</sup>"); + if (addCharge) { + int charge = vwr.ms.at[i].getFormalCharge(); + if (charge != 0) + sb.append("<sup>" + Math.abs(charge) + + (charge > 0 ? "+" : charge < 0 ? "-" : "") + "</sup>"); + } sb.append(";"); } return sb.toString(); } + public boolean isOpenShell() { + return haveBeta; + } + + } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-05 23:01:11 UTC (rev 21394) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-05 23:59:18 UTC (rev 21395) @@ -49,8 +49,9 @@ # 10. Run jmol/tools build-release.xml # -Jmol.___JmolVersion="14.8.2-beta-2017-02-03" +Jmol.___JmolVersion="14.8.2-beta-2017-02-05" + bug fix: NBO plugin fixes noting undocumented This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-02-06 21:26:19
|
Revision: 21399 http://sourceforge.net/p/jmol/code/21399 Author: hansonr Date: 2017-02-06 21:26:16 +0000 (Mon, 06 Feb 2017) Log Message: ----------- NBO fixes Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/gennbo/NBODialogRun.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOFileHandler.java trunk/Jmol/src/org/gennbo/NBORequest.java trunk/Jmol/src/org/gennbo/NBOService.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java trunk/Jmol/src/org/jmol/script/ScriptEval.java trunk/Jmol/src/org/jmol/script/ScriptParam.java Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -231,8 +231,10 @@ */ private void resetModuleVariables() { + // Anything here that looks like it needs resetting prior to changing panels. + resetCurrentOrbitalClicked(); - // Anything here that looks like it needs resetting prior to changing panels. + resetVariables_c(); } @@ -600,7 +602,7 @@ jpNBODialog.setEditable(false); jpNBODialog.setBorder(null); //jpNBODialog.setFont(new Font("Arial", Font.PLAIN, 16)); - bodyText = ""; + nboOutputBodyText = ""; } jpNBODialog.setContentType("text/html"); //jpNBODialog.setFont(new Font("Arial",Font.PLAIN,10)); @@ -657,7 +659,7 @@ } protected void saveDialogOutput(String saveFileName) { - String output = bodyText.replaceAll("<br>", sep); + String output = nboOutputBodyText.replaceAll("<br>", sep); output = output.replaceAll("<b>", ""); output = output.replaceAll("</b>", ""); output = output.replaceAll("<i>", ""); @@ -736,7 +738,7 @@ } } if (dialogMode == DIALOG_MODEL) { - notFromNBO = true; + setModelNotFromNBO(); } else { if (dialogMode != DIALOG_RUN) { doOpenPanel(DIALOG_RUN); @@ -781,7 +783,7 @@ * clear output panel */ protected void doClearOutput() { - bodyText = ""; + nboOutputBodyText = ""; // String fontFamily = jpNBOLog.getFont().getFamily(); if (jpNBODialog != null) jpNBODialog.setText(""); Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -229,9 +229,7 @@ protected Viewer vwr; protected NBOService nboService; - protected JLabel icon; - protected JSplitPane centerPanel; protected JPanel modulePanel; @@ -240,12 +238,6 @@ protected boolean jmolOptionVIEW = false; // present only the VIEW option protected boolean jmolOptionNONBO = false; // do not try to contact NBOServe - protected NBOFileHandler inputFileHandler; - protected NBOFileHandler saveFileHandler; - protected int dialogMode; - protected boolean isJmolNBO; - protected boolean haveService; - protected JLabel statusLab; protected JTextPane jpNBODialog; protected JSlider opacity = new JSlider(0, 10); @@ -254,19 +246,51 @@ protected JCheckBox jCheckAtomNum, jCheckSelHalo, jCheckDebugVerbose, jCheckNboView, jCheckWireMesh; - protected String bodyText = ""; + + // Jmol/NBO visual settings + protected Color orbColor1, orbColor2, backgroundColor; - protected String color1, color2; + protected String orbColorJmol1, orbColorJmol2; protected float opacityOp; protected boolean nboView; protected boolean useWireMesh; - private boolean showAtNum; + protected boolean debugVerbose; - //protected Hashtable<String, String[]> lists; - protected boolean debugVerbose; + // private/protected variables + + /** + * Tracks the last resonance structure type (nrtstra, nrtstrb, alpha, beta); + * reset to “alpha” by openPanel() + */ + private String rsTypeLast = "alpha"; + + + /** + * The input file handler; recreated via openPanel() + */ + protected NBOFileHandler inputFileHandler; + /** + * the dialog that is currently open, for example DIALOG_MODEL-- persistent + */ + protected int dialogMode; + + /** + * true if NBOServe has successfully restarted-- persistent + */ + protected boolean haveService; + + /** + * String value of what is showing in the session dialog -- persistent + */ + protected String nboOutputBodyText = ""; + + protected void resetVariables_c() { + rsTypeLast = "alpha"; + } + protected NBODialogConfig(JFrame f) { super(f); } @@ -507,9 +531,9 @@ } protected void setOrbitalDisplayOptions() { - color1 = "[" + orbColor1.getRed() + " " + orbColor1.getGreen() + " " + orbColorJmol1 = "[" + orbColor1.getRed() + " " + orbColor1.getGreen() + " " + orbColor1.getBlue() + "]"; - color2 = "[" + orbColor2.getRed() + " " + orbColor2.getGreen() + " " + orbColorJmol2 = "[" + orbColor2.getRed() + " " + orbColor2.getGreen() + " " + orbColor2.getBlue() + "]"; colorMeshes(); if (!nboView) @@ -743,7 +767,7 @@ if (!format0.equals("p")) line = "<" + format0 + ">" + line + "</" + format1 + ">"; - jpNBODialog.setText("<html><font face=\"Arial\">" + (bodyText = bodyText + line + "\n<br>") + jpNBODialog.setText("<html><font face=\"Arial\">" + (nboOutputBodyText = nboOutputBodyText + line + "\n<br>") + "</font></html>"); } jpNBODialog.setCaretPosition(jpNBODialog.getDocument().getLength()); @@ -963,10 +987,6 @@ sb.append("GLOBAL C_").append(label).append(" ").append(val).append(sep); } - - private String atomTypeLast = "alpha"; - - /** * label atoms: (number lone pairs)+atomnum * @@ -979,7 +999,7 @@ /** * Changes bonds and labels on the Jmol model when new resonance structure is selected * - * @param type + * @param type one of nrtstra, nrtstrb, alpha, beta * @param rsNum * - index of RS in Combo Box */ @@ -990,9 +1010,9 @@ } // boolean atomsOnly = (type == null); if (type == null) { - type = atomTypeLast; + type = rsTypeLast; } else { - atomTypeLast = type; + rsTypeLast = type; } SB sb = new SB(); sb.append("measurements off;select visible;label %a;"); Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -105,43 +105,65 @@ "Display point-group symmetry of current model" }; - //encodes number of atoms that can be selected - private int boxCount; private final static int BOX_COUNT_4 = 4, BOX_COUNT_2 = 2, BOX_COUNT_1 = 1; private final static int MAX_HISTORY = 5; /// private static final String LOAD_SCRIPT = ";set zoomlarge false;zoomTo 0.5 {*} 0;"; + private NBOFileHandler saveFileHandler; + private Box innerEditBox; private JTextField jtNIHInput, jtLineFormula; + private JTextField currVal; private JComboBox<String> jcSymOps; + private JButton rebond, jbClear; + private JLabel atomsLabel; + private Box editComponent; + private Box inputHeader; + private Box saveHeader; + private Component inputComponent; + private Box saveComponent; + private Box editHeader; + private JTextField[] atomNumBoxes; + private JLabel valueLabel = new JLabel(""); + // only used by private listeners + protected JTextField editValueTf; - protected JButton jbApply, jbClear; + protected JButton jbApply; protected JComboBox<String> jComboSave; protected JButton undo, redo; protected Stack<String> undoStack, redoStack; - protected JTextField currVal; - protected JTextField[] atomNumBoxes; - protected JLabel valueLabel = new JLabel(""); - protected JPanel panel; + // used by other modules + + JPanel panel; + /** + * identifies which action button as pressed -- for example, MODEL_ACTION_ALTER + */ + private int actionID; + + /** + * encodes number of atoms that can be selected + */ + private int boxCount; + + /** * A model is being loaded into Jmol that NBO does not know about yet */ - protected boolean notFromNBO; + private boolean notFromNBO; - private JButton rebond; + /** + * A flag to indicate that when the next atom is clicked, the selection should be cleared. + * Set to true each time a non-value option action is processed. + */ + private boolean resetOnAtomClick; - private JLabel atomsLabel; - protected int actionID; - private Box editComponent; - private Box inputHeader; - private Box saveHeader; - private Component inputComponent; - private Box saveComponent; - private Box editHeader; + protected void setModelNotFromNBO() { + notFromNBO = true; + } private void showComponents(boolean tf) { editHeader.setVisible(tf); @@ -150,7 +172,16 @@ saveComponent.setVisible(tf); } + void modelSetSaveParametersFromInput(NBOFileHandler nboFileHandler, + String dir, String name, String ext) { + if (saveFileHandler != null && nboFileHandler != saveFileHandler) + saveFileHandler.setInput(dir, name, + PT.isOneOf(ext, NBODialogConfig.OUTPUT_FILE_EXTENSIONS) ? ext : ""); + } + + protected JPanel buildModelPanel() { + resetVariables_m(); panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); @@ -179,6 +210,12 @@ } + private void resetVariables_m() { + actionID = 0; + boxCount = 0; + notFromNBO = false; + } + private Box getEditHeader() { Box topBox = Box.createHorizontalBox(); undo = new JButton("<HTML>←Undo</HTML>"); @@ -874,9 +911,6 @@ updateSelected(false); } - private boolean resetOnAtomClick; - - /** * Apply the selected edit action to a model. * Modified: trunk/Jmol/src/org/gennbo/NBODialogRun.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBODialogRun.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -81,15 +81,13 @@ "STERIC: Natural steric analysis" }; protected Box editBox; - protected JRadioButton rbLocal; protected JRadioButton[] keywordButtons; protected JButton btnRun; protected JTextField tfJobName; - protected String[] file47Data; - protected String file47Keywords; + //protected String file47Keywords; protected JPanel buildRunPanel() { panel = new JPanel(); @@ -287,7 +285,7 @@ textPanel.setAlignmentX(0.5f); keywordTextPane = new JTextPane(); - doSetKeywordTextPane(file47Keywords); + doSetKeywordTextPane(cleanNBOKeylist(inputFileHandler.read47File(false)[1], true)); JScrollPane sp = new JScrollPane(); sp.getViewport().add(keywordTextPane); @@ -308,16 +306,20 @@ protected void doRunSaveButton() { String s = keywordTextPane.getText(); - file47Keywords = ""; + String keywords = ""; String[] tokens = PT.getTokens(PT.rep(PT.rep(s, "$NBO", ""), "$END", "").trim()); for (String x : tokens) { - if (x.indexOf("=") < 0) { - file47Keywords += x.toUpperCase() + " "; + String xuc = x.toUpperCase(); + if (xuc.indexOf("FILE=") < 0) { + keywords += xuc + " "; } else { tfJobName.setText(x.substring(x.indexOf("=") + 1)); } } + String name = tfJobName.getText(); + inputFileHandler.update47File(name, keywords, false); addNBOKeylist(); + tfJobName.setText(name); editBox.repaint(); editBox.revalidate(); } @@ -329,9 +331,10 @@ menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.Y_AXIS)); menuPanel.setBorder(BorderFactory.createLoweredBevelBorder()); keywordButtons = new JRadioButton[RUN_KEYWORD_LIST.length]; + String keywords = cleanNBOKeylist(inputFileHandler.read47File(false)[1], false); for (int i = 0; i < keywordButtons.length; i++) { keywordButtons[i] = new JRadioButton(RUN_KEYWORD_LIST[i]); - if (file47Keywords.contains(RUN_KEYWORD_LIST[i].split(":")[0])) + if (keywords.contains(RUN_KEYWORD_LIST[i].split(":")[0])) keywordButtons[i].setSelected(true); keywordButtons[i].setAlignmentX(0.0f); menuPanel.add(keywordButtons[i]); @@ -413,28 +416,10 @@ // } // } // } - - /** - * Open the current 47 file and parse its data into three sections: pre, - * keywords, post; - * - * @param andSetJobNameField - * set true to set the JobName text field as well - * - * @return [pre, keywords, post] - */ - protected String[] get47FileData(boolean andSetJobNameField) { -// if (file47Data != null && !forceNew) -// return file47Data; - file47Data = inputFileHandler.read47File(); - file47Keywords = cleanNBOKeylist(file47Data[1], andSetJobNameField); - return file47Data; - } - + protected void notifyLoad_r() { if (vwr.ms.ac == 0) return; - get47FileData(true); doSetStructure("alpha"); addNBOKeylist(); for (Component c : panel.getComponents()) @@ -613,7 +598,7 @@ * @return new list, including trailing space character. */ protected String getKeywordsFromButtons() { - String keywords = " " + cleanNBOKeylist(file47Keywords, false) + " "; + String keywords = " " + cleanNBOKeylist(cleanNBOKeylist(inputFileHandler.read47File(false)[1], false), false) + " "; if (keywordButtons == null) return keywords; for (int i = 0; i < keywordButtons.length; i++) { @@ -694,8 +679,6 @@ // get the current file47Data and nboKeywords - get47FileData(false); - String newKeywords = getKeywordsFromButtons(); //Check the plot file names match job name, warn user otherwise @@ -741,17 +724,16 @@ jobName = (jobName.equals("") ? inputFileHandler.jobStem : jobName); - String[] fileData = inputFileHandler.update47File(jobName, newKeywords); + String[] fileData = inputFileHandler.update47File(jobName, newKeywords, true); if (fileData == null) return; - get47FileData(true); SB sb = new SB(); postAddGlobalC(sb, "PATH", inputFileHandler.inputFile.getParent()); postAddGlobalC(sb, "JOBSTEM", inputFileHandler.jobStem); postAddGlobalC(sb, "ESS", "gennbo"); postAddGlobalC(sb, "LABEL_1", "FILE=" + jobName); - logCmd("RUN GenNBO FILE=" + jobName + " " + file47Keywords); + logCmd("RUN GenNBO FILE=" + jobName + " " + cleanNBOKeylist(fileData[1], false)); postNBO_r(sb, NBOService.MODE_RUN_GENNBO, "Running GenNBO..."); } Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -77,10 +77,17 @@ * keywords in order of PRESENTATION * */ - private final static String[] searchButtonLabels = { "NPA", "NBO", "BEND", - "E2PERT", "NLMO", "CMO", "NRT", "STERIC", "DIPOLE", "OPBAS", "B1B2" }; + private final static String[] keywordNames = { "NPA", "NBO", "BEND", + "E2", "NLMO", "NRT", "STERIC", "CMO", "DIPOLE", "OPBAS", "B1B2" }; /** + * @return name of the keyword + */ + private String getKeyword() { + return getKeywordName(keywordID); + } + + /** * map button index to NBO keyword numbers. */ private final static int[] btnIndexToNBOKeyword = new int[] { KEYWD_NPA, @@ -88,7 +95,21 @@ KEYWD_STERIC, // these three are shifted KEYWD_DIPOLE, KEYWD_OPBAS, KEYWD_BAS1BAS2 }; + private String getKeywordButtonLabel(int ibtn) { + return (ibtn == 3 ? "E2PERT" : getKeywordName(btnIndexToNBOKeyword[ibtn])); + } + /** + * * does not include "HELP" (0) + * + * @param ikeywd + * @return name for the specified keyword ID + */ + private String getKeywordName(int ikeywd) { + return keywordNames[ikeywd - 1]; + } + + /** * Return the NBOServe keyword for a given SEARCH option; allows for a * different presentation ordering in Jmol relative to actual numbers in * NBOServe @@ -199,11 +220,33 @@ protected JComboBox<String> comboSearchOrb1, comboSearchOrb2, comboUnit1, comboAtom1, comboAtom2, comboBasis2, comboBasisOperation; + /** + * The ID associated with the currently chosen keyword. + */ + private int keywordID = KEYWD_WEBHELP; + + /** + * the radio button option selected for a given keyword + */ + private int optionSelected; + + /** + * the OPBAS operator currently selected + */ + private int operator = 1; + + /** + * set true when an action is going to produce a change that will require + * relabeling the atoms, specifically NPA option 11/12 and NRT option 9 + */ + private boolean needRelabel; - private String keyProp; - private int rbSelection; - private int operator = 1; - private int searchKeywordNumber = KEYWD_WEBHELP; + + private void resetVariables_s() { + optionSelected = -1; + keywordID = 0; + operator = 1; + } ///////////////////////////////////////////////////////////////// @@ -339,9 +382,6 @@ inputFileHandler.setBrowseEnabled(true); - keyProp = ""; - searchKeywordNumber = 0; - viewSettingsBox.removeAll(); String file = vwr.getProperty("String", "filename", null).toString(); String ext = NBOFileHandler.getExt(new File(file)); @@ -368,25 +408,24 @@ } protected void buildHome() { - rbSelection = -1; + resetVariables_s(); resetCurrentOrbitalClicked(); opList.removeAll(); comboBasisOperation.setVisible(false); keyWdBtn.setVisible(false); opList.setLayout(new GridBagLayout()); opList.setBackground(Color.white); - searchKeywordNumber = KEYWD_WEBHELP; + keywordID = KEYWD_WEBHELP; viewSettingsBox.setVisible(false); GridBagConstraints c = new GridBagConstraints(); - keyProp = ""; c.fill = GridBagConstraints.HORIZONTAL; - for (int i = 0; i < searchButtonLabels.length * 2; i += 2) { + for (int i = 0; i < keywordNames.length * 2; i += 2) { c.gridy = i; c.gridx = 0; c.gridwidth = 1; final int index = i / 2; - JButton btn = new JButton(searchButtonLabels[index]); + JButton btn = new JButton(getKeywordButtonLabel(index)); btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { @@ -423,14 +462,14 @@ } protected String getSearchHelpURL() { - return (searchKeywordNumber == KEYWD_WEBHELP ? "search_help.htm" : keyProp - .equals("E2") ? "search_e2pert_help.htm" : "search_" + keyProp + return (keywordID == KEYWD_WEBHELP ? "search_help.htm" : getKeyword() + .equals("E2") ? "search_e2pert_help.htm" : "search_" + getKeyword() + "_help.htm"); } protected void doSetSpin() { doSetStructure(alphaSpin.isSelected() ? "alpha" : "beta"); - switch (searchKeywordNumber) { + switch (keywordID) { case KEYWD_NBO: case KEYWD_BEND: case KEYWD_DIPOLE: @@ -454,7 +493,7 @@ } protected void doSelectKeyword() { - if (searchKeywordNumber == KEYWD_NRT && comboUnit1.getModel().getSize() > 0) + if (keywordID == KEYWD_NRT && comboUnit1.getModel().getSize() > 0) comboUnit1.setSelectedIndex(0); SB script = new SB(); if (needRelabel) { @@ -472,7 +511,7 @@ secondPick = true; back.setEnabled(true); viewSettingsBox.setVisible(!jmolOptionNONBO); - keyWdBtn.setText("<html><font color=black>" + keyProp + "</font></html>"); + keyWdBtn.setText("<html><font color=black>" + getKeyword() + "</font></html>"); keyWdBtn.setVisible(true); runScriptNow("isosurface delete;refresh"); opList.removeAll(); @@ -480,7 +519,7 @@ ButtonGroup btnGroup = new ButtonGroup(); opList.setLayout(new BoxLayout(opList, BoxLayout.Y_AXIS)); - if (searchKeywordNumber == KEYWD_OPBAS) { + if (keywordID == KEYWD_OPBAS) { comboBasisOperation.setVisible(true); opList.add(comboBasisOperation); } @@ -552,17 +591,16 @@ " (6) max <*r|" + operator + "|*c> value for any *r,*c", " (7) min <*r|" + operator + "|*c> value for any *r,*c" }; } - + protected void keywordClicked(int index) throws IllegalArgumentException { isNewModel = false; - searchKeywordNumber = index; + keywordID = index; resetCurrentOrbitalClicked(); switch (index) { case KEYWD_NPA: load(31, false); comboAtom2 = null; comboBasis1.setSelectedIndex(BASIS_PNAO); // WAS BASIS_NAO ? - keyProp = "NPA"; setKeyword(new String[] { "b", "a", "o PNAO", "u" }, new String[] { "Basis: ", "Atom: ", "Orbital: ", "Unit: " }); changeKey(npa); @@ -570,33 +608,29 @@ case KEYWD_NBO: load(36, true); comboBasis1.setSelectedIndex(BASIS_PNBO); - keyProp = "NBO"; - setKeyword(new String[] { "b", "o PNBO" }, new String[] { "Basis: ", - "Orbital: " }); + setKeyword(new String[] { "b", "o PNBO" }, + new String[] { "Basis: ", "Orbital: " }); changeKey(nbo); break; case KEYWD_NLMO: load(38, true); comboBasis1.setSelectedIndex(BASIS_PNLMO); - keyProp = "NLMO"; - setKeyword(new String[] { "b", "o PNLMO" }, new String[] { "Basis: ", - "Orbital: " }); + setKeyword(new String[] { "b", "o PNLMO" }, + new String[] { "Basis: ", "Orbital: " }); changeKey(nlmo); break; case KEYWD_BEND: load(34, true); comboBasis1.setSelectedIndex(BASIS_PNHO); - keyProp = "BEND"; - setKeyword(new String[] { "b", "o PNHO" }, new String[] { "Basis: ", - "Orbital: " }); + setKeyword(new String[] { "b", "o PNHO" }, + new String[] { "Basis: ", "Orbital: " }); changeKey(bend); break; case KEYWD_NRT: runScriptNow("set bondpicking true"); - keyProp = "NRT"; if (isOpenShell()) - setKeyword("s a a' rs".split(" "), new String[] { "Spin: ", "Atom A: ", - "Atom A': ", "Res Struct: " }); + setKeyword("s a a' rs".split(" "), + new String[] { "Spin: ", "Atom A: ", "Atom A': ", "Res Struct: " }); else setKeyword("a a' rs".split(" "), new String[] { "Atom A: ", "Atom A': ", "Res Struct: " }); @@ -605,38 +639,33 @@ case KEYWD_E2PERT: load(36, true); comboBasis1.setSelectedIndex(BASIS_PNBO); - keyProp = "E2"; - setKeyword(new String[] { "b", "d nbo", "a nbo", "u" }, new String[] { - "Basis: ", "d-NBO: ", "a-NBO:", "Unit: " }); + setKeyword(new String[] { "b", "d nbo", "a nbo", "u" }, + new String[] { "Basis: ", "d-NBO: ", "a-NBO:", "Unit: " }); changeKey(e2); break; case KEYWD_STERIC: load(38, true); comboBasis1.setSelectedIndex(BASIS_PNLMO); - keyProp = "STERIC"; - setKeyword(new String[] { "b", "d nlmo", "d' nlmo", "u" }, new String[] { - "Basis: ", "d-NLMO: ", "d'-NLMO:", "Unit: " }); + setKeyword(new String[] { "b", "d nlmo", "d' nlmo", "u" }, + new String[] { "Basis: ", "d-NLMO: ", "d'-NLMO:", "Unit: " }); changeKey(steric); break; case KEYWD_CMO: load(40, true); comboBasis1.setSelectedIndex(BASIS_MO); - keyProp = "CMO"; - file47Keywords = cleanNBOKeylist(get47FileData(true)[1], true); - if (!file47Keywords.contains("CMO")) { + if (!cleanNBOKeylist(inputFileHandler.read47File(false)[1], true).contains("CMO")) { doRunGenNBOJob("CMO"); return; } - setKeyword(new String[] { "b", "c cmo", "n" }, new String[] { "Basis: ", - "MO: ", "NBO:" }); + setKeyword(new String[] { "b", "c cmo", "n" }, + new String[] { "Basis: ", "MO: ", "NBO:" }); changeKey(mo); break; case KEYWD_DIPOLE: load(38, true); comboBasis1.setSelectedIndex(BASIS_PNLMO); - keyProp = "DIPOLE"; - setKeyword(new String[] { "b", "o", "u" }, new String[] { "Basis: ", - "Orbital: ", "Unit:" }); + setKeyword(new String[] { "b", "o", "u" }, + new String[] { "Basis: ", "Orbital: ", "Unit:" }); changeKey(dip); break; case KEYWD_OPBAS: @@ -646,16 +675,14 @@ comboBasis1.setUI(new StyledComboBoxUI(180, -1)); comboBasis1.setEditable(false); comboBasisOperation.requestFocus(); - keyProp = "OPBAS"; setKeyword("b1 r c".split(" "), new String[] { "Basis:", "Row:", - "Collumn:" }); + "Column:" }); changeKey(new String[] {}); break; case KEYWD_BAS1BAS2: runScriptNow("set bondpicking true"); - keyProp = "B1B2"; setKeyword("b1 b2 r c".split(" "), new String[] { "Basis 1:", "Basis 2:", - "Row:", "Collumn:" }); + "Row:", "Column:" }); getBasisOperations2(false); break; } @@ -691,7 +718,7 @@ if (key.equals("b") || key.equals("s")) { Box b = Box.createHorizontalBox(); - if (searchKeywordNumber == KEYWD_CMO) { + if (keywordID == KEYWD_CMO) { b.add(radioOrbMO); b.add(radioOrbNBO); } else if (key.equals("b")) { @@ -746,9 +773,10 @@ comboAtom2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - runScriptQueued("select on; select remove{*}; " + "select add {*}[" - + (comboAtom1.getSelectedIndex() + 1) + "]; select add {*}[" - + (comboAtom2.getSelectedIndex() + 1) + "]"); + if (comboAtom1.getSelectedIndex() > 0 && comboAtom2.getSelectedIndex() > 0) + runScriptQueued("select on @" + + (comboAtom1.getSelectedIndex()) + ",@" + + (comboAtom2.getSelectedIndex())); } }); innerListPanel.add(comboAtom2); @@ -785,7 +813,7 @@ innerListPanel.add(comboBasis1); } } - logCmd(keyProp + " Search Results:"); + logCmd(getKeyword() + " Search Results:"); JLabel lab = new JLabel("Settings"); lab.setFont(nboFont); @@ -797,12 +825,14 @@ viewSettingsBox.add(innerListPanel, BorderLayout.CENTER); } - protected void doSearchAtom1Action(int index1, int index2) { + protected void doSearchAtom1Action(int atomno1, int atomno2) { + if (atomno1 <= 0 || atomno2 <= 0) + return; if (comboAtom2 == null) - runScriptQueued("select on; select {*}[" + index1 + "]"); + runScriptQueued("select on @" + atomno1); else - runScriptQueued("select on; select none; " + "select add {*}[" - + index1 + "]; select add {*}[" + index2 + "]"); + runScriptQueued("select on @" + + atomno1 + ", @" + atomno2); } private void setComboSearchOrbDefaultAction(final String key) { @@ -866,7 +896,7 @@ if (index2 <= 0) return; checkOptionClickForOrbitalSelection(); - if (searchKeywordNumber == KEYWD_BAS1BAS2) { + if (keywordID == KEYWD_BAS1BAS2) { showOrbJmol(comboBasis2.getSelectedItem().toString(), index2, "b2"); } else if (key.equals("a")) { showOrbJmol("NBO", comboSearchOrb1.getModel().getSize() + (index2 - 1), @@ -881,7 +911,7 @@ protected void doSetBasis() { resetCurrentOrbitalClicked(); - switch (searchKeywordNumber) { + switch (keywordID) { case KEYWD_BAS1BAS2: if (comboBasis2 == null) return; @@ -914,8 +944,13 @@ : str); } + /** + * The main method that is called to set up the post event to NBO. + * + * @param op + */ protected void doGetSearchValue(int op) { - rbSelection = op - 1; + optionSelected = op - 1; // check orbital is selected JComboBox<String> orb1 = comboSearchOrb1; JComboBox<String> orb2 = null, atom1 = null, atom2 = null, unit1 = null; @@ -923,14 +958,14 @@ int offset1 = 0, offset2 = 0; final SB sb = getMetaHeader(false); - postAddGlobalI(sb, "KEYWORD", searchKeywordNumber, null); + postAddGlobalI(sb, "KEYWORD", keywordID, null); boolean isLabel = false; boolean isLabelBonds = false; // generally an offset is 1 because meta commands are 1-based, // but if a combobox has a <select ...> in position 1, then the offset will be 0 - switch (searchKeywordNumber) { + switch (keywordID) { case KEYWD_NPA: orb1 = comboSearchOrb2; unit1 = comboUnit1; @@ -957,8 +992,8 @@ break; case KEYWD_NRT: orb1 = null; - atom1 = comboAtom1; - atom2 = comboAtom2; + atom1 = (op <= 6 ? comboAtom1 : null); + atom2 = (op >= 4 && op <= 6 ? comboAtom2 : null); unit1 = comboUnit1; labelUnit1 = "RES_STR"; isLabel = (op == 9); @@ -995,7 +1030,9 @@ } boolean isOK = (orb1 == null || orb1.getSelectedIndex() > 0) - && (orb2 == null || orb2.getSelectedIndex() > 0); + && (orb2 == null || orb2.getSelectedIndex() > 0) + && (atom1 == null || atom1.getSelectedIndex() > 0) + && (atom2 == null || atom2.getSelectedIndex() > 0); if (!isOK) return; if (orb1 != null) @@ -1008,7 +1045,7 @@ postAddGlobalI(sb, labelAtom2, 0, atom2); if (unit1 != null) postAddGlobalI(sb, labelUnit1, 1, unit1); - postAddGlobalI(sb, "OPT_" + keyProp, op, null); + postAddGlobalI(sb, "OPT_" + getKeyword(), op, null); // // switch (searchKeywordNumber) { @@ -1100,7 +1137,7 @@ protected void processReturnedSearchList(JComboBox<String> cb) { DefaultComboBoxModel<String> list = (DefaultComboBoxModel<String>) cb .getModel(); - switch (searchKeywordNumber) { + switch (keywordID) { case KEYWD_E2PERT: if (cb == comboSearchOrb2) { //Relabel a-nbo to correct orbital number @@ -1190,42 +1227,42 @@ * selected. */ protected void checkOptionClickForOrbitalSelection() { - if (rbSelection < 0) + if (optionSelected < 0) return; boolean doClick = false; - switch (searchKeywordNumber) { + switch (keywordID) { default: case KEYWD_NRT: case KEYWD_OPBAS: case KEYWD_BAS1BAS2: break; case KEYWD_NPA: - doClick = (rbSelection > 4 && rbSelection < 10); + doClick = (optionSelected > 4 && optionSelected < 10); break; case KEYWD_NBO: - doClick = (rbSelection < 4); + doClick = (optionSelected < 4); break; case KEYWD_BEND: - doClick = (rbSelection < 6); + doClick = (optionSelected < 6); break; case KEYWD_E2PERT: - doClick = (rbSelection < 3); + doClick = (optionSelected < 3); break; case KEYWD_NLMO: doClick = true; break; case KEYWD_STERIC: - doClick = (rbSelection > 1 && rbSelection < 4); + doClick = (optionSelected > 1 && optionSelected < 4); break; case KEYWD_CMO: doClick = true; break; case KEYWD_DIPOLE: - doClick = (rbSelection > 2 && rbSelection < 6); + doClick = (optionSelected > 2 && optionSelected < 6); break; } if (doClick) - rBtns[rbSelection].doClick(); + rBtns[optionSelected].doClick(); } /** @@ -1242,7 +1279,7 @@ if (tok.length < 2) { // single-atom pick int n = PT.parseInt(atomnoOrBondInfo); - switch (n == Integer.MIN_VALUE ? KEYWD_NBO : searchKeywordNumber) { + switch (n == Integer.MIN_VALUE ? KEYWD_NBO : keywordID) { case KEYWD_NBO: case KEYWD_BEND: case KEYWD_NLMO: @@ -1264,8 +1301,8 @@ } if (comboAtom1 != null && comboAtom2 == null) { comboAtom1.setSelectedIndex(n); - if (rbSelection >= 0 && rbSelection < 3) - rBtns[rbSelection].doClick(); + if (optionSelected >= 0 && optionSelected < 3) + rBtns[optionSelected].doClick(); } else if (comboAtom1 != null && comboAtom2 != null) { secondPick = !secondPick; if (secondPick) @@ -1281,7 +1318,7 @@ String[] tok2 = tok[1].split(" "); String at1 = tok2[2]; String at2 = tok2[5]; - switch (searchKeywordNumber) { + switch (keywordID) { case KEYWD_NBO: case KEYWD_NLMO: case KEYWD_DIPOLE: @@ -1297,8 +1334,8 @@ int a2 = Integer.parseInt(at2.replaceAll("[\\D]", "")); this.comboAtom1.setSelectedIndex(a1); this.comboAtom2.setSelectedIndex(a2); - if (rbSelection > 2 && rbSelection < 6) - rBtns[rbSelection].doClick(); + if (optionSelected > 2 && optionSelected < 6) + rBtns[optionSelected].doClick(); return; case KEYWD_E2PERT: case KEYWD_STERIC: @@ -1325,7 +1362,7 @@ case KEYWD_OPBAS: case KEYWD_BAS1BAS2: JComboBox<String> tmpBas = comboBasis1; - if (searchKeywordNumber == KEYWD_BAS1BAS2) { + if (keywordID == KEYWD_BAS1BAS2) { if (!secondPick) tmpBas = comboBasis2; } @@ -1413,15 +1450,15 @@ protected int selectOnOrb_s(String b1, String b2, JComboBox<String> cb) { DefaultComboBoxModel<String> list = (DefaultComboBoxModel<String>) cb .getModel(); - int curr = 0, size = list.getSize(); - if (currOrb.contains(b1)) - curr = list.getIndexOf(list.getSelectedItem()) - 1; + int size = list.getSize(); + int curr = (currOrb.contains(b1) ? currOrbIndex : 0); for (int i = curr + 1; i < size + curr; i++) { - String str = list.getElementAt(i % size).replace(" ", ""); + int ipt = i % size; + String str = list.getElementAt(ipt).replace(" ", ""); if (str.contains(b1) || b2 != null && str.contains(b2)) { - int ipt = i % size; list.setSelectedItem(list.getElementAt(ipt)); currOrb = str; + currOrbIndex = ipt; return ipt; } } @@ -1433,12 +1470,11 @@ * */ protected void notifyLoad_s() { - file47Data = null; if (vwr.ms.ac == 0) return; runScriptNow("isosurface delete"); - rbSelection = -1; + optionSelected = -1; doSetStructure("alpha"); if (isOpenShell()) { alphaSpin.setVisible(true); @@ -1449,8 +1485,8 @@ } optionBox.setVisible(true); - if (searchKeywordNumber > 0 && isNewModel) { - keywordClicked(searchKeywordNumber); + if (keywordID > 0 && isNewModel) { + keywordClicked(keywordID); } } @@ -1476,7 +1512,7 @@ int mode = NBOService.MODE_SEARCH_LIST; SB sb = getMetaHeader(false); String cmd; - int metaKey = searchKeywordNumber; + int metaKey = keywordID; if (metaKey >= KEYWD_OPBAS) { cmd = "o"; JComboBox<String> tmpBas = ((get.startsWith("c") && metaKey == KEYWD_BAS1BAS2) ? comboBasis2 @@ -1510,7 +1546,7 @@ } postAddGlobalI(sb, "KEYWORD", metaKey, null); postAddCmd(sb, cmd); - if (get.equals("c") && searchKeywordNumber == KEYWD_CMO) + if (get.equals("c") && keywordID == KEYWD_CMO) mode = NBOService.MODE_SEARCH_LIST_MO; postNBO_s(sb, mode, cb, "Getting list " + cmd); } @@ -1594,7 +1630,7 @@ if (isLabel ? !processLabel(sb, lines[i], pt) : !processLabelBonds(sb, lines[i])) break; - runScriptQueued(sb.toString()); + runScriptQueued(sb.toString() + ";select none;"); break; } } @@ -1603,9 +1639,9 @@ try { double val = Double.parseDouble(line); val = round(val, 4); - sb.append(";select{*}[" + (count) + "];label " + val); + sb.append(";select @" + (count) + ";label " + val); } catch (Exception e) { - e.printStackTrace(); + System.out.println("SEARCH: label processing ended!"); return false; } return true; @@ -1622,7 +1658,7 @@ // measure id "m1" {C1} {C3} radius 0 "testing" sb.append("font measures 20; measure id 'm" + toks[0] + "_" + toks[1] - + "' @" + toks[0] + " @" + toks[1] + " radius 0.02 \"" + toks[2] + + "' @" + toks[0] + " @" + toks[1] + " radius 0.0 \"" + toks[2] + "\";"); } } catch (Exception e) { Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -90,36 +90,56 @@ protected final int BASIS_NLMO = 8; protected final int BASIS_MO = 9; - protected OrbitalList orbitals; private JScrollPane orbScroll; private Box centerBox, bottomBox; private Box vecBox; - protected Box planeBox; - private JRadioButton profileBtn, contourBtn, viewBtn; - - // protected String vectorDef, planeDef; - protected DefaultListModel<String> alphaList, betaList; - protected JComboBox<String> comboBasis1; - protected JRadioButton alphaSpin, betaSpin; + private Box planeBox; + private JRadioButton profileBtn, contourBtn, viewBtn; private JRadioButton atomOrient; + private DefaultListModel<String> alphaList, betaList; + /** + * "Jmol" vs. "Atom" perspective chosen + */ + private boolean jmolView; + + + // effectively private, but need to be protected + // because they are used by private inner classes + + protected OrbitalList orbitals; + + /** + * The state of the VIEW panel, in terms of what modal dialogs are open; + * reset to VIEW_STATE_MAIN each time openPanel() is run. + */ protected int viewState; - protected boolean positiveSign, jmolView; - protected JRadioButton[] storage; + + protected final static int VIEW_STATE_MAIN = 0; + protected final static int VIEW_STATE_PLANE = 1; + protected final static int VIEW_STATE_VECTOR = 2; + protected final static int VIEW_STATE_CAMERA = 3; + + + // used in SEARCH and in some cases NBODialg itself: + + protected JComboBox<String> comboBasis1; + protected JRadioButton alphaSpin, betaSpin; protected Container viewSettingsBox; - protected int startingModelCount; - protected int modelCount = 1; protected boolean isNewModel = true; + // used by SEARCH; cleared by openPanel() using + protected String currOrb = ""; protected int currOrbIndex; - + + //NBOServe view settings private String[] plVal, vecVal, lineVal; - protected final JTextField[] vectorFields = new JTextField[8]; - protected final JTextField[] planeFields = new JTextField[12]; - protected final JTextField[] camFields = new JTextField[53]; - protected final JTextField[] lineFields = new JTextField[7]; + private final JTextField[] vectorFields = new JTextField[8]; + private final JTextField[] planeFields = new JTextField[12]; + private final JTextField[] camFields = new JTextField[53]; + private final JTextField[] lineFields = new JTextField[7]; private String[] camVal = { "6.43", "0.0", "0.0", "50.0", "2.0", "2.0", "0.0", "0.60", "1.0", "1.0", "40.0", "0.0", "0.60", "1.0", "1.0", "40.0", @@ -143,15 +163,7 @@ // 49 - 51 "5a", "5b", "5c", "6" }; - // protected final JTextField[] contourFields = new JTextField[7]; - - protected final static int VIEW_STATE_MAIN = 0; - protected final static int VIEW_STATE_PLANE = 1; - protected final static int VIEW_STATE_VECTOR = 2; - protected final static int VIEW_STATE_CAMERA = 3; - protected JPanel buildViewPanel() { - startingModelCount = vwr.ms.mc; panel = new JPanel(new BorderLayout()); viewState = VIEW_STATE_MAIN; ///panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); @@ -939,8 +951,7 @@ resetCurrentOrbitalClicked(); if (comboBasis1.getSelectedIndex() == BASIS_MO) { - file47Keywords = cleanNBOKeylist(inputFileHandler.read47File()[1], true); - if (!file47Keywords.contains("CMO")) { + if (!cleanNBOKeylist(inputFileHandler.read47File(false)[1], true).contains("CMO")) { doRunGenNBOJob("CMO"); return; } @@ -1405,7 +1416,7 @@ return ";select visible;isosurface " + id + " color " - + (isNegative ? color1 + " " + color2 : color2 + " " + color1) + + (isNegative ? orbColorJmol1 + " " + orbColorJmol2 : orbColorJmol2 + " " + orbColorJmol1) + " cutoff 0.0316 NBO " + type + " " Modified: trunk/Jmol/src/org/gennbo/NBOFileHandler.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOFileHandler.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBOFileHandler.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -216,7 +216,6 @@ + "\nor select a new location for your NBOServe executable"); return; } - dialog.isJmolNBO = true; fileDir = inputFile.getParent(); boolean canLoad = true; boolean isOK = true; @@ -274,7 +273,7 @@ * * @return [ pre-keyword params, keywords, post-keyword params ] */ - protected String[] read47File() { + protected String[] read47File(boolean doAll) { clearStructureList(); String[] fileData = new String[] { "", "", "", "" }; String nboKeywords = ""; @@ -297,6 +296,8 @@ params.append(s).append(sep); nboKeywords = PT.trim(prePost[1], "\t\r\n "); params = postParams; + if (!doAll) + break; continue; } params.append(s).append(sep).append("$END").append(sep); @@ -310,10 +311,10 @@ } private String removeFileKeyword(String nboKeywords) { - String[] tokens = PT.getTokens(nboKeywords); + String[] tokens = PT.getTokens(nboKeywords.toUpperCase()); nboKeywords = ""; for (int i = tokens.length; --i >= 0;) - if (tokens[i].toUpperCase().indexOf("FILE=") < 0) + if (tokens[i].indexOf("FILE=") < 0) nboKeywords += " " + tokens[i]; return nboKeywords.trim(); } @@ -393,11 +394,8 @@ tfName.setText(name); if (tfExt != null) tfExt.setText(ext); - if (dialog.saveFileHandler != null && this != dialog.saveFileHandler) - dialog.saveFileHandler.setInput(dir, name, - PT.isOneOf(ext, NBODialogConfig.OUTPUT_FILE_EXTENSIONS) ? ext : ""); - //System.out.println("-------" + f + n + "/" + e); if (dir != null && name != null && ext != null) { + dialog.modelSetSaveParametersFromInput(this, dir, name, ext); inputFile = new File(dir + "\\" + name + "." + ext); } } @@ -436,10 +434,10 @@ this.writeToFile(inputFile.getAbsolutePath(), data); } - public String[] update47File(String jobName, String keywords) { + public String[] update47File(String jobName, String keywords, boolean doMerge) { if (!useExt.equals("47")) return null; - String[] fileData = read47File(); + String[] fileData = read47File(true); if (writeToFile(inputFile.getAbsolutePath(), fileData[0] + "$NBO\n " + "FILE=" + jobName + " " + keywords + " $END" + sep + fileData[2])) { fileData[1] = keywords; Modified: trunk/Jmol/src/org/gennbo/NBORequest.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBORequest.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBORequest.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -47,6 +47,8 @@ */ boolean isRUN; + public long timeStamp; + NBORequest(){} void set(Runnable returnMethod, String statusInfo, String... fileData) { @@ -65,6 +67,9 @@ * @param reply */ void sendReply(String reply) { + + System.out.println("CMD IS >>>>" + fileData[1] + "<<<<<"); + System.out.println("REPLY IS >>>>" + reply + "<<<<<"); this.reply = reply; if (callbackMethod != null) callbackMethod.run(); Modified: trunk/Jmol/src/org/gennbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOService.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/gennbo/NBOService.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -252,6 +252,7 @@ while (!Thread.currentThread().isInterrupted()) { try { + Thread.sleep(1); // Get and process the return, continuing if incomplete or no activity. @@ -305,7 +306,7 @@ * @throws IOException * @throws InterruptedException */ - protected String getNBOMessage() throws IOException, InterruptedException { + protected synchronized String getNBOMessage() throws IOException, InterruptedException { // 1. Check for available bytes. @@ -443,36 +444,42 @@ //////////////////////////// Send Request to NBOServe /////////////////////////// - + /** * Start the current request by writing its metacommands to disk and sending a * command to NBOServe directing it to that file via its stdin. * - * We allow the Jmol command + * We allow the Jmol command * * set TESTFLAG2 TRUE * - * to give us an alert just prior to sending the command to NBOServe. - * This allows us to edit these files in PSPad (which will scan for changed - * files and load them again if requested) and thus send any modification we - * want to NBOServe for testing. + * to give us an alert just prior to sending the command to NBOServe. This + * allows us to edit these files in PSPad (which will scan for changed files + * and load them again if requested) and thus send any modification we want to + * NBOServe for testing. * * @param request */ protected void startRequest(NBORequest request) { if (request == null) return; - + + if (request.timeStamp != 0) { + System.out.println("SENDING TWICE?"); + return; + } + request.timeStamp = System.currentTimeMillis(); + currentRequest = request; + String cmdFileName = null, data = null, list = ""; for (int i = 2, n = request.fileData.length; i < n + 2; i += 2) { - - cmdFileName = request.fileData[i%n]; - data = request.fileData[(i + 1)%n]; + + cmdFileName = request.fileData[i % n]; + data = request.fileData[(i + 1) % n]; if (cmdFileName != null) { list += " " + cmdFileName; - dialog.inputFileHandler.writeToFile(getServerPath(cmdFileName), - data); + dialog.inputFileHandler.writeToFile(getServerPath(cmdFileName), data); System.out.println("saved file " + cmdFileName + "\n" + data + "\n"); } } @@ -480,10 +487,11 @@ String cmd = "<" + cmdFileName + ">"; System.out.println("sending " + cmd); - + if (vwr.getBoolean(T.testflag2)) - vwr.alert("files " + list + " have been generated; ready to send " + cmd + "\n\n" + data); - + vwr.alert("files " + list + " have been generated; ready to send " + cmd + + "\n\n" + data); + if (nboIn == null) restart(); nboIn.println(cmd); @@ -567,7 +575,8 @@ pt = s.indexOf("*end*"); if (pt < 0) { System.out.println("bad start/end packet from NBOServe: " + s); - return true; + removeRequest = false; + return false; } // standard expectation Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -253,8 +253,11 @@ vwr.ms.fixFormalCharges(vwr.getAllAtoms()); if (sb == null) return null; + sb.append("select visible;label %a;"); for (int i = vwr.ms.ac; --i >= 0;) { - sb.append("select (atomindex=" + i + ");label "); + if (lp[i] == 0 && lv[i] == 0) + continue; + sb.append("select @" + (i + 1) + ";label "); if (lp[i] > 0) sb.append("<sup>(" + lp[i] + ")</sup>"); if (lv[i] > 0) Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEval.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/jmol/script/ScriptEval.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -2535,6 +2535,7 @@ getCmdExt().dispatch(tok, false, st); break; default: + System.out.println(T.nameOf(tok) + " is not a command"); error(ERROR_unrecognizedCommand); } } Modified: trunk/Jmol/src/org/jmol/script/ScriptParam.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptParam.java 2017-02-06 04:48:33 UTC (rev 21398) +++ trunk/Jmol/src/org/jmol/script/ScriptParam.java 2017-02-06 21:26:16 UTC (rev 21399) @@ -58,6 +58,7 @@ } protected boolean checkToken(int i) { + System.out.println("iToken,i,slen" + iToken + " "+ i + " " + slen); return (iToken = i) < slen; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-02-07 02:21:17
|
Revision: 21400 http://sourceforge.net/p/jmol/code/21400 Author: hansonr Date: 2017-02-07 02:21:14 +0000 (Tue, 07 Feb 2017) Log Message: ----------- Jmol.___JmolVersion="14.8.2-beta-2017-02-06" new feature: Viewer.runScriptCautiously(String) replacement name for older Viewer.runScript(String) bug fix: Viewer.runScript(String) now uses evaluateExpression(T[]) bug fix: NBO plugin fixes - huge success! Lesson learned: Never mix viewer.runScript() and viewer.runScriptQueued() calls. What will happen is that the unqueued calls will corrupt the queued calls. However, if you use viewer.evaluateExpression("script('....')"), that is also synchronous, and it uses a new ScriptEval() to isolate it from the script being queued. You still have the problem that the scripts could mess up each other, but at least it will not cause catastrophic failure. Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialog.java trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/gennbo/NBODialogModel.java trunk/Jmol/src/org/gennbo/NBODialogSearch.java trunk/Jmol/src/org/gennbo/NBODialogView.java trunk/Jmol/src/org/gennbo/NBOService.java trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java trunk/Jmol/src/org/jmol/api/JmolViewer.java trunk/Jmol/src/org/jmol/script/ScriptParam.java trunk/Jmol/src/org/jmol/shapesurface/Isosurface.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/PropertyManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/gennbo/NBODialog.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialog.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/gennbo/NBODialog.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -697,6 +697,7 @@ */ @SuppressWarnings("incomplete-switch") public void notifyCallback(CBK type, Object[] data) { + System.out.println(type + "" + data[1]); if (!isVisible()) return; switch (type) { @@ -730,7 +731,7 @@ if (vwr.ms.ac == 0) return; String f = runScriptNow("print _modelFile"); - if (!f.equals("null") && !iAmLoading) { + if (!iAmLoading) { if (!f.endsWith(".47")) { if (dialogMode != DIALOG_MODEL) { doOpenPanel(DIALOG_MODEL); Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -226,6 +226,7 @@ private static final int MODE_PATH_WORKING = 1; final static protected Color titleColor = Color.blue; + private static final String NBOPROPERTY_DISPLAY_OPTIONS = "displayOptions"; protected Viewer vwr; protected NBOService nboService; @@ -491,7 +492,7 @@ } protected void doSetDefaults(boolean isJmol) { - nboPlugin.setNBOProperty("orbitalDisplayOptions", "default"); + nboPlugin.setNBOProperty(NBOPROPERTY_DISPLAY_OPTIONS, "default"); getOrbitalDisplayOptions(); opacity.setValue((int) (opacityOp * 10)); colorBox1.setSelectedItem(orbColor1); @@ -516,7 +517,7 @@ jCheckWireMesh.doClick(); colorBox1.setSelectedItem(Color.cyan); colorBox2.setSelectedItem(Color.yellow); - opacity.setValue(3); + opacity.setValue(7); try { String atomColors = ""; atomColors = GuiMap.getResourceString(this, @@ -535,24 +536,25 @@ + orbColor1.getBlue() + "]"; orbColorJmol2 = "[" + orbColor2.getRed() + " " + orbColor2.getGreen() + " " + orbColor2.getBlue() + "]"; - colorMeshes(); + //colorMeshes(); + updatePanelSettings(); // new if (!nboView) - nboPlugin.setNBOProperty("orbitalDisplayOptions", orbColor1.getRGB() + nboPlugin.setNBOProperty(NBOPROPERTY_DISPLAY_OPTIONS, orbColor1.getRGB() + "," + orbColor2.getRGB() + "," + opacityOp + "," + useWireMesh); } private String getOrbitalDisplayOptions() { - String options = (jmolOptionNONBO ? "jmol" : nboPlugin.getNBOProperty("orbitalDisplayOptions", + String options = (jmolOptionNONBO ? "jmol" : nboPlugin.getNBOProperty(NBOPROPERTY_DISPLAY_OPTIONS, "default")); if (options.equals("default") || options.equals("nboView")) { orbColor1 = Color.cyan; orbColor2 = Color.yellow; - opacityOp = 0.3f; + opacityOp = 0.7f; useWireMesh = false; } else if (options.equals("jmol")){ orbColor1 = Color.blue; orbColor2 = Color.red; - opacityOp = 0f; + opacityOp = 1f; useWireMesh = true; } else { // color1, color2, useMesh @@ -805,21 +807,35 @@ synchronized protected String runScriptNow(String script) { logInfo("!$ " + script, Logger.LEVEL_DEBUG); - return PT.trim(vwr.runScript(script), "\n"); +// return PT.trim(vwr.runScript(script), "\n"); + return PT.trim("" + vwr.evaluateExpression("script(\"" + script.replace('"', '\'') + "\")"), "\n"); + } protected boolean iAmLoading; protected void loadModelFileQueued(File f, boolean saveOrientation) { iAmLoading = true; - String s = "load \"" + f.getAbsolutePath() + "\"" + JMOL_FONT_SCRIPT ; + String s = "load \"" + f.getAbsolutePath().replace('\\', '/') + "\"" + JMOL_FONT_SCRIPT ; if (saveOrientation) s = "save orientation o1;" + s + ";restore orientation o1"; runScriptQueued(s); } + /** + * Uses the LOAD DATA option to load data from NBO; + * just getting all the "load xxx" methods in the same place. + * + * + * @param s + */ + protected void loadModelDataQueued(String s) { + iAmLoading = true; + runScriptQueued(s); + } + protected String loadModelFileNow(String s) { iAmLoading = true; - return runScriptNow("load " + s); + return runScriptNow("load " + s.replace('\\', '/')); } private boolean connect() { @@ -959,7 +975,7 @@ } protected void colorMeshes() { - updatePanelSettings(); + // yeiks! causes file load again! updatePanelSettings(); } protected void getNewInputFileHandler(int mode) { @@ -1005,7 +1021,7 @@ */ protected void doSearchSetResStruct(String type, int rsNum) { if (!showAtNum) { - runScriptNow("measurements off;select visible;label off; select none;refresh"); + runScriptNow("measurements off;isosurface off;select visible;label off; select none;refresh"); return; } // boolean atomsOnly = (type == null); @@ -1015,7 +1031,7 @@ rsTypeLast = type; } SB sb = new SB(); - sb.append("measurements off;select visible;label %a;"); + sb.append("measurements off;isosurface off;select visible;label %a;"); String color = (nboView) ? "black" : "gray"; sb.append("select visible;color labels white;" + "select visible & _H;color labels " + color + ";" @@ -1026,7 +1042,7 @@ runScriptNow(sb.toString()); return; } - sb.append(s); + //sb.append(s); if (nboView) { sb.append("select add {*}.bonds;color bonds lightgrey;" + "wireframe 0.1;"); Modified: trunk/Jmol/src/org/gennbo/NBODialogModel.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/gennbo/NBODialogModel.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -1305,15 +1305,13 @@ break; case NBOService.MODE_MODEL_NEW: case NBOService.MODE_MODEL_EDIT: - if (s.contains("\\")) - s = s.replaceAll("\\\\", ""); s += JMOL_FONT_SCRIPT; if (mode == NBOService.MODE_MODEL_EDIT) s = "set refreshing off;save orientation o4;load " + s + ";restore orientation o4;set refreshing on"; else - s = "load " + s; - runScriptQueued(s); + s = ";load " + s; + loadModelDataQueued(s); break; case NBOService.MODE_MODEL_SAVE: break; @@ -1325,16 +1323,16 @@ s = PT.rep(s.substring(s.indexOf("\n") + 1), "\"\n", "\" NBO\n"); s = "set refreshing false;load " + s + JMOL_FONT_SCRIPT + ";set refreshing true"; - runScriptQueued(s); + loadModelDataQueued(s); break; case NBOService.MODE_MODEL_TO_NBO: s = "load " + s + JMOL_FONT_SCRIPT + ";set refreshing true;"; // s = "set refreshing off;save orientation o3;load " + s // + ";restore orientation o3;set refreshing on"; - runScriptQueued(s); + loadModelDataQueued(s); break; case NBOService.MODE_MODEL_UNDO_REDO: - runScriptQueued("set refreshing false;load " + s + JMOL_FONT_SCRIPT + loadModelDataQueued("set refreshing false;load " + s + JMOL_FONT_SCRIPT + ";restore orientation o2;set refreshing true"); break; case NBOService.MODE_MODEL_VALUE: @@ -1344,4 +1342,5 @@ break; } } + } Modified: trunk/Jmol/src/org/gennbo/NBODialogSearch.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/gennbo/NBODialogSearch.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -393,11 +393,11 @@ } protected void doSearchCMOSelectNBO() { - showOrbJmol("PNBO", comboSearchOrb1.getSelectedIndex(), "NBO"); + showOrbJmol("PNBO", comboSearchOrb1.getSelectedIndex(), "cmo"); } protected void doSearchCMOSelectMO() { - showOrbJmol("MO", comboSearchOrb2.getSelectedIndex(), "MO"); + showOrbJmol("MO", comboSearchOrb2.getSelectedIndex(), "cmo"); } protected void doComboBasisOperationAction() { @@ -488,7 +488,13 @@ break; case KEYWD_CMO: postListRequest("n", comboSearchOrb1); + if (radioOrbMO.isSelected()) + radioOrbMO.doClick(); break; + case KEYWD_OPBAS: + case KEYWD_BAS1BAS2: + doSetBasis(); + break; } } @@ -1201,12 +1207,13 @@ * @param id */ protected void showOrbJmol(String type, int i, String id) { - if (i <= 0) + if (i <= 0) { + runScriptQueued("select visible;isosurface delete"); + logError("Select an orbital."); return; + } id = fixID(id); - runScriptQueued("select visible;isosurface ID \"" - + id - + "\" delete;" + runScriptQueued("select visible;isosurface delete;" + getJmolIsosurfaceScript(id, peeify(type), i, betaSpin.isSelected(), false)); } @@ -1508,14 +1515,19 @@ ////////////////////////// SEARCH POSTS TO NBO /////////////////// - private void postListRequest(String get, JComboBox<String> cb) { + /** + * + * @param cmd_basis a possibly space-separated set of CMD and + * @param cb + */ + private void postListRequest(String cmd_basis, JComboBox<String> cb) { int mode = NBOService.MODE_SEARCH_LIST; SB sb = getMetaHeader(false); String cmd; int metaKey = keywordID; - if (metaKey >= KEYWD_OPBAS) { + if (keywordID == KEYWD_OPBAS || keywordID == KEYWD_BAS1BAS2) { cmd = "o"; - JComboBox<String> tmpBas = ((get.startsWith("c") && metaKey == KEYWD_BAS1BAS2) ? comboBasis2 + JComboBox<String> tmpBas = ((cmd_basis.startsWith("c") && metaKey == KEYWD_BAS1BAS2) ? comboBasis2 : comboBasis1); switch (tmpBas.getSelectedIndex()) { case BASIS_AO: @@ -1542,11 +1554,11 @@ postAddGlobalI(sb, "BAS_1", 1, tmpBas); } else { postAddGlobalI(sb, "BAS_1", 1, comboBasis1); - cmd = get.split(" ")[0]; + cmd = cmd_basis.split(" ")[0]; } postAddGlobalI(sb, "KEYWORD", metaKey, null); postAddCmd(sb, cmd); - if (get.equals("c") && keywordID == KEYWD_CMO) + if (keywordID == KEYWD_CMO && cmd_basis.equals("c_cmo")) mode = NBOService.MODE_SEARCH_LIST_MO; postNBO_s(sb, mode, cb, "Getting list " + cmd); } @@ -1630,7 +1642,7 @@ if (isLabel ? !processLabel(sb, lines[i], pt) : !processLabelBonds(sb, lines[i])) break; - runScriptQueued(sb.toString() + ";select none;"); + runScriptQueued(sb.toString() + JMOL_FONT_SCRIPT + ";select none;"); break; } } Modified: trunk/Jmol/src/org/gennbo/NBODialogView.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/gennbo/NBODialogView.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -1413,18 +1413,18 @@ */ protected String getJmolIsosurfaceScript(String id, String type, int orbitalNumber, boolean isBeta, boolean isNegative) { - return ";select visible;isosurface " + return ";select visible;isosurface ID \"" + id - + " color " + + "\" color " + (isNegative ? orbColorJmol1 + " " + orbColorJmol2 : orbColorJmol2 + " " + orbColorJmol1) + " cutoff 0.0316 NBO " + type + " " + orbitalNumber - + (isBeta ? " beta" : "") + + (isBeta && !type.equals("MO") ? " beta" : "") // AO? + " frontonly " + (useWireMesh ? " mesh nofill" : " nomesh fill translucent " - + opacityOp) + ";select none;"; + + (1 - opacityOp)) + ";select none;"; } class OrbitalList extends JList<String> implements ListSelectionListener, Modified: trunk/Jmol/src/org/gennbo/NBOService.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOService.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/gennbo/NBOService.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -189,6 +189,7 @@ byte[] buffer = new byte[1024]; String cachedReply = ""; + protected boolean destroyed; /** * Start the ProcessBuilder for NBOServe and listen to its stdout (Fortran LFN @@ -222,6 +223,7 @@ */ String startProcess() { try { + destroyed = false; cantStartServer = true; if (!doConnect) return null; @@ -250,7 +252,7 @@ String s; - while (!Thread.currentThread().isInterrupted()) { + while (!destroyed && !Thread.currentThread().isInterrupted()) { try { Thread.sleep(1); @@ -280,8 +282,17 @@ } } + if (destroyed) + closeProcess(); } - }); + }) { + + @Override + public void interrupt() { + destroyed = true; + } + + }; nboListener.setName("NBOServiceThread" + System.currentTimeMillis()); nboListener.start(); @@ -290,8 +301,12 @@ nboIn = new PrintWriter(nboServer.getOutputStream()); } catch (IOException e) { - dialog.logInfo(e.getMessage(), Logger.LEVEL_ERROR); - return e.getMessage(); + String s = e.getMessage(); + System.out.println(s); + if (s.contains("error=1455")) + s = "Jmol can't do that - low on memory"; + dialog.logError(s); + return s; } cantStartServer = false; return null; @@ -320,6 +335,8 @@ setReady(true); int m = 0; do { + if (destroyed) + return null; n = m; Thread.sleep(10); if (nboOut == null) Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -362,7 +362,7 @@ } if (sb != null) { //System.out.println("jmolobject " + sb); - sm.vwr.runScript(sb.toString()); + sm.vwr.runScriptCautiously(sb.toString()); return; } // cartoon, trace, etc. Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOParser.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -184,7 +184,7 @@ for (int i = 0; i < structureList.size(); i++) { Map<String, Object> map = (Map<String, Object>) structureList.get(i); if (spin.equals(map.get("spin")) && type.equals(map.get("type")) - && (index < 0 || i == ((Integer) map.get("index")).intValue())) { + && (index < 0 || index == ((Integer) map.get("index")).intValue())) { return map; } } Modified: trunk/Jmol/src/org/jmol/api/JmolViewer.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolViewer.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/jmol/api/JmolViewer.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -541,13 +541,24 @@ abstract public int[] resizeInnerPanel(int width, int height); /** + * starting with 14.8.2-beta-2017-02-06, uses script(xxxx) function; + * see runScriptCautiously for the older version + * + * @param script + * @return string from ScriptEvaluator#outputBuffer + */ + abstract public String runScript(String script); + + /** + * Formerly runScript(script). + * * run a script immediately and return output buffer string * Jmol 13.1.15 * * @param script * @return string from ScriptEvaluator#outputBuffer */ - abstract public String runScript(String script); + public String runScriptCautiously(String script){return null;} abstract public String extractMolData(String what); Modified: trunk/Jmol/src/org/jmol/script/ScriptParam.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptParam.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/jmol/script/ScriptParam.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -58,7 +58,6 @@ } protected boolean checkToken(int i) { - System.out.println("iToken,i,slen" + iToken + " "+ i + " " + slen); return (iToken = i) < slen; } Modified: trunk/Jmol/src/org/jmol/shapesurface/Isosurface.java =================================================================== --- trunk/Jmol/src/org/jmol/shapesurface/Isosurface.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/jmol/shapesurface/Isosurface.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -1514,7 +1514,7 @@ thisMesh.jvxlData.allowVolumeRender = false; thisMesh.setColorsFromJvxlData(sg.params.colorRgb); if (thisMesh.jvxlData.slabInfo != null) - vwr.runScript("isosurface " + thisMesh.jvxlData.slabInfo); + vwr.runScriptCautiously("isosurface " + thisMesh.jvxlData.slabInfo); if (sg.params.psi_monteCarloCount > 0) thisMesh.diameter = -1; // use set DOTSCALE Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-07 02:21:14 UTC (rev 21400) @@ -49,11 +49,22 @@ # 10. Run jmol/tools build-release.xml # -Jmol.___JmolVersion="14.8.2-beta-2017-02-05" +Jmol.___JmolVersion="14.8.2-beta-2017-02-06" +new feature: Viewer.runScriptCautiously(String) replacement name for older Viewer.runScript(String) + +bug fix: Viewer.runScript(String) now uses evaluateExpression(T[]) -bug fix: NBO plugin fixes +bug fix: NBO plugin fixes - huge success! +Lesson learned: Never mix viewer.runScript() and viewer.runScriptQueued() calls. + What will happen is that the unqueued calls will corrupt the + queued calls. However, if you use viewer.evaluateExpression("script('....')"), + that is also synchronous, and it uses a new ScriptEval() to isolate it from + the script being queued. You still have the problem that the scripts could + mess up each other, but at least it will not cause catastrophic failure. + + noting undocumented set fontscaling true; font label 10 arial plain 0.020 Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -1123,7 +1123,7 @@ if (exp.startsWith("print")) { if (!atomExpression.equals("selected")) exp = PT.rep(exp, "selected", atomExpression.substring(1, atomExpression.length() - 1)); - return vwr.runScript(exp); + return vwr.runScriptCautiously(exp); } if (exp.indexOf("label") < 0) exp = atomExpression + ".label(\"" + exp + "\").lines"; Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2017-02-06 21:26:16 UTC (rev 21399) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2017-02-07 02:21:14 UTC (rev 21400) @@ -2276,7 +2276,7 @@ switch (tokType) { case T.xyz: if (script != null) - runScript(script); + runScriptCautiously(script); break; case T.vibration: setStatusFrameChanged(true, false); @@ -8923,9 +8923,22 @@ pickedList.pushPop(SV.newV(T.bitset, BSUtil.newAndSetBit(atomIndex)), null); } + + @Override + public String runScript(String script) { + return (String) evaluateExpression(new T[] { T.t(T.script), T.t(T.leftparen), SV.newS(script), T.t(T.rightparen) }); + } + /** + * formerly runScript(), this method really can ONLY be called by + * the viewer being run from an already-running script. If it is + * invoked by a separate thread, it can wreak havoc on any queued + * thread, since they are not thread safe. + * @param script + * @return output of the script. + */ @Override - public String runScript(String script) { + public String runScriptCautiously(String script) { // from isosurface reading JVXL file with slab SB outputBuffer = new SB(); try { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-02-07 03:17:27
|
Revision: 21401 http://sourceforge.net/p/jmol/code/21401 Author: hansonr Date: 2017-02-07 03:17:24 +0000 (Tue, 07 Feb 2017) Log Message: ----------- Jmol.___JmolVersion="14.8.2-beta-2017-02-06" new feature: Viewer.runScriptCautiously(String) replacement name for older Viewer.runScript(String) bug fix: Viewer.runScript(String) now uses evaluateExpression(T[]) bug fix: NBO plugin fixes - huge success! Lesson learned: Never mix viewer.runScript() and viewer.runScriptQueued() calls. What will happen is that the unqueued calls will corrupt the queued calls. However, if you use viewer.evaluateExpression("script('....')"), that is also synchronous, and it uses a new ScriptEval() to isolate it from the script being queued. You still have the problem that the scripts could mess up each other, but at least it will not cause catastrophic failure. Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBODialogConfig.java trunk/Jmol/src/org/jmol/script/ScriptEval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/gennbo/NBODialogConfig.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-07 02:21:14 UTC (rev 21400) +++ trunk/Jmol/src/org/gennbo/NBODialogConfig.java 2017-02-07 03:17:24 UTC (rev 21401) @@ -808,7 +808,7 @@ synchronized protected String runScriptNow(String script) { logInfo("!$ " + script, Logger.LEVEL_DEBUG); // return PT.trim(vwr.runScript(script), "\n"); - return PT.trim("" + vwr.evaluateExpression("script(\"" + script.replace('"', '\'') + "\")"), "\n"); + return PT.trim("" + vwr.runScript(script.replace('"', '\'')), "\n"); } Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEval.java 2017-02-07 02:21:14 UTC (rev 21400) +++ trunk/Jmol/src/org/jmol/script/ScriptEval.java 2017-02-07 03:17:24 UTC (rev 21401) @@ -833,7 +833,10 @@ } else if (expr instanceof T[]) { BS bs = atomExpression((T[]) expr, 0, 0, true, false, null, false); return (asVariable ? SV.newV(T.bitset, bs) : bs); - + } else if (expr instanceof T[][]) { + setStatement(((T[][])expr)[0], 1); + return (asVariable ? parameterExpressionList(0, -1, false).get(0) + : parameterExpressionString(0, -1)); } } catch (Exception ex) { Logger.error("Error evaluating: " + expr + "\n" + ex); Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-07 02:21:14 UTC (rev 21400) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-07 03:17:24 UTC (rev 21401) @@ -57,7 +57,7 @@ bug fix: NBO plugin fixes - huge success! -Lesson learned: Never mix viewer.runScript() and viewer.runScriptQueued() calls. +Lesson learned: Nebver mix viewer.runScript() and viewer.runScriptQueued() calls. What will happen is that the unqueued calls will corrupt the queued calls. However, if you use viewer.evaluateExpression("script('....')"), that is also synchronous, and it uses a new ScriptEval() to isolate it from Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2017-02-07 02:21:14 UTC (rev 21400) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2017-02-07 03:17:24 UTC (rev 21401) @@ -8926,7 +8926,7 @@ @Override public String runScript(String script) { - return (String) evaluateExpression(new T[] { T.t(T.script), T.t(T.leftparen), SV.newS(script), T.t(T.rightparen) }); + return "" + evaluateExpression(new T[][] { new T[] {T.t(T.script), T.t(T.leftparen), SV.newS(script), T.t(T.rightparen)}, null }); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2017-03-06 23:08:08
|
Revision: 21447 http://sourceforge.net/p/jmol/code/21447 Author: hansonr Date: 2017-03-06 23:08:05 +0000 (Mon, 06 Mar 2017) Log Message: ----------- code cleanup 14.10.0-beta-2017-2-27 Modified Paths: -------------- trunk/Jmol/src/org/gennbo/NBOUtil.java trunk/Jmol/src/org/jmol/modelset/Atom.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/gennbo/NBOUtil.java =================================================================== --- trunk/Jmol/src/org/gennbo/NBOUtil.java 2017-02-28 03:25:17 UTC (rev 21446) +++ trunk/Jmol/src/org/gennbo/NBOUtil.java 2017-03-06 23:08:05 UTC (rev 21447) @@ -32,9 +32,10 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; -import java.math.BigDecimal; -import java.math.RoundingMode; +import javajs.util.PT; +import javajs.util.SB; + import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JComboBox; @@ -46,10 +47,6 @@ import javax.swing.plaf.metal.MetalComboBoxUI; -import javajs.util.PT; -import javajs.util.SB; - - public class NBOUtil { public static void postAddGlobalC(SB sb, String label, String val) { Modified: trunk/Jmol/src/org/jmol/modelset/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/Atom.java 2017-02-28 03:25:17 UTC (rev 21446) +++ trunk/Jmol/src/org/jmol/modelset/Atom.java 2017-03-06 23:08:05 UTC (rev 21447) @@ -1381,8 +1381,7 @@ case T.coord: return P3.newP(this); case T.fracxyz: - return getFractionalCoordPt(!vwr.g.legacyJavaFloat, false, - ptTemp); // was !group.chain.model.isJmolDataFrame + return getFractionalCoordPt(!vwr.g.legacyJavaFloat, false, ptTemp); // was !group.chain.model.isJmolDataFrame case T.fuxyz: return getFractionalCoordPt(!vwr.g.legacyJavaFloat, false, ptTemp); case T.unitxyz: Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-02-28 03:25:17 UTC (rev 21446) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2017-03-06 23:08:05 UTC (rev 21447) @@ -49,12 +49,15 @@ # 10. Run jmol/tools build-release.xml # -Jmol.___JmolVersion="14.9.2-beta-2017-2-19" +Jmol.___JmolVersion="14.10.0-beta-2017-2-27" +bug fix: ScriptManager debug output being sent even if -i (silent) command line option set. + new feature: 4-order bond in MOL file using 14 for bond order -JmolVersion="14.9.1" +JmolVersion="14.9.1" released 2/19/2017 + bug fix: bad release file for 14.9.0 JmolVersion="14.9.0" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |