From: <ha...@us...> - 2008-07-15 13:33:49
|
Revision: 9593 http://jmol.svn.sourceforge.net/jmol/?rev=9593&view=rev Author: hansonr Date: 2008-07-15 06:33:46 -0700 (Tue, 15 Jul 2008) Log Message: ----------- version=11.5.47_dev draw ARC; draw RAMACHANDRAN; write RAMACHANDRAN DRAW # new feature: draw ARC {pt1} {pt2} {ptref} {theta0, nDegrees, fractionalOffset} # new feature: draw ARROW ARC {pt1} {pt2} {ptref} {theta0, nDegrees, fractionalOffset} # # draws a circular arc or arrow around an axis defined by {pt1} and {pt2} # using {ptref} as a starting point (looking down the axis, angles # are measured in a clockwise manner, starting with the projected position # of {ptref} in a plane perpendicular to the axis. This is similar (but opposite) # to the way dihedral angles are indicated. # theta0 is the the offset angle from 0 # nDegrees is the number of degrees of arc to draw # fractionalOffset is the fraction of the distance from {pt1} to {pt2} for the # plane containing the arc. # # new feature: draw RAMACHANDRAN # draws phi and psi angles in the form of draw ARROW ARC # new feature: write RAMACHANDRAN draw Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelsetbio/AminoPolymer.java trunk/Jmol/src/org/jmol/modelsetbio/BioPolymer.java trunk/Jmol/src/org/jmol/shapespecial/Draw.java trunk/Jmol/src/org/jmol/shapespecial/DrawRenderer.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/JmolConstants.java trunk/Jmol/src/org/openscience/jmol/app/ScriptWindow.java Modified: trunk/Jmol/src/org/jmol/modelsetbio/AminoPolymer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/AminoPolymer.java 2008-07-14 09:02:48 UTC (rev 9592) +++ trunk/Jmol/src/org/jmol/modelsetbio/AminoPolymer.java 2008-07-15 13:33:46 UTC (rev 9593) @@ -49,8 +49,6 @@ private boolean hasOAtoms; boolean hasWingPoints() { return hasOAtoms; } - //boolean hbondsAlreadyCalculated; - //boolean debugHbonds; public void calcHydrogenBonds(BitSet bsA, BitSet bsB) { Modified: trunk/Jmol/src/org/jmol/modelsetbio/BioPolymer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/BioPolymer.java 2008-07-14 09:02:48 UTC (rev 9592) +++ trunk/Jmol/src/org/jmol/modelsetbio/BioPolymer.java 2008-07-15 13:33:46 UTC (rev 9593) @@ -524,6 +524,8 @@ Monomer monomer = p.monomers[m]; if (bsAtoms == null || bsAtoms.get(monomer.getLeadAtomIndex())) { Atom a = monomer.getLeadAtom(); + char cid = monomer.getChainID(); + String id = "" + monomer.getResno() + (cid == '\0' ? "" : "" + cid); if (isRamachandran) { x = monomer.getPhi(); y = monomer.getPsi(); @@ -533,6 +535,30 @@ z -= 180; // center on 0 if (Float.isNaN(x) || Float.isNaN(y) || Float.isNaN(z)) continue; + + if (isDraw) { + if (bsSelected != null && !bsSelected.get(a.getAtomIndex())) + continue; + // draw arrow arc {3.N} {3.ca} {3.C} {131 -131 0.5} "phi -131" + // draw arrow arc {3.CA} {3.C} {3.N} {0 133 0.5} "psi 133" + // as looked DOWN the bond, with {pt1} in the back, using + // standard dihedral/Jmol definitions for anticlockwise positive angles + AminoMonomer aa = (AminoMonomer)monomer; + pdbATOM.append("draw phi" + id + " arrow arc scale 0.5 ") + .append(Escape.escape(aa.getNitrogenAtomPoint())) + .append(Escape.escape((Point3f)a)) + .append(Escape.escape(aa.getCarbonylCarbonAtomPoint())) + .append("{" + (-x) + " " + x + " 0.2} \"phi = " + (int) x + "\"") + .append(" color ").append(qColor[0]).append('\n'); + pdbATOM.append("draw psi" + id + " arrow arc scale 0.5 ") + .append(Escape.escape((Point3f)a)) + .append(Escape.escape(aa.getCarbonylCarbonAtomPoint())) + .append(Escape.escape(aa.getNitrogenAtomPoint())) + .append("{0 " + y + " 0.2} \"psi = " + (int) y + "\"") + .append(" color ").append(qColor[1]).append('\n'); + continue; + } + w = a.getPartialCharge(); float phiNext = (m == p.monomerCount - 1 ? Float.NaN : p.monomers[m + 1].getPhi()); @@ -551,8 +577,6 @@ z = angle; } } else { - char cid = monomer.getChainID(); - String id = "" + monomer.getResno() + (cid == '\0' ? "" : "" + cid); cid = monomer.getLeadAtom().getAlternateLocationID(); if (cid != '\0') id += cid; @@ -649,6 +673,7 @@ : p instanceof NucleicPolymer ? ((NucleicMonomer) monomer).getQuaternionFrameCenter(qtype) : new Point3f()); + if (isDraw) { if (bsSelected != null && !bsSelected.get(a.getAtomIndex())) continue; Modified: trunk/Jmol/src/org/jmol/shapespecial/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/shapespecial/Draw.java 2008-07-14 09:02:48 UTC (rev 9592) +++ trunk/Jmol/src/org/jmol/shapespecial/Draw.java 2008-07-15 13:33:46 UTC (rev 9593) @@ -75,6 +75,7 @@ private float newScale; private float length; private boolean isCurve; + private boolean isArc; private boolean isArrow; private boolean isVector; private boolean isCircle; @@ -112,7 +113,7 @@ colix = Graphics3D.ORANGE; newScale = 0; isFixed = isReversed = isRotated45 = isCrossed = noHead = false; - isCurve = isArrow = isPlane = isCircle = isCylinder = false; + isCurve = isArc = isArrow = isPlane = isCircle = isCylinder = false; isVertices = isPerpendicular = isVector = false; isVisible = isValid = true; length = Float.MAX_VALUE; @@ -180,6 +181,16 @@ return; } + if ("arc" == propertyName) { + isCurve = true; + isArc = true; + if (isArrow) { + isArrow = false; + isVector = true; + } + return; + } + if ("circle" == propertyName) { isCircle = true; return; @@ -600,12 +611,22 @@ private void setPolygon(int nPoly) { int nVertices = nPoints; int drawType = JmolConstants.DRAW_POINT; + if (isArc) { + if (nVertices == 4) { + drawType = JmolConstants.DRAW_ARC; + } else { + isArc = false; + isVector = false; + isCurve = false; + isArrow = true; + } + } if (isCircle) drawType = (isPlane ? JmolConstants.DRAW_CIRCULARPLANE : JmolConstants.DRAW_CIRCLE); - else if ((isCurve || isArrow) && nVertices >= 2) + else if ((isCurve || isArrow) && nVertices >= 2 && !isArc) drawType = (isCurve ? JmolConstants.DRAW_CURVE : JmolConstants.DRAW_ARROW); - if (isVector) { + if (isVector && !isArc) { if (nVertices > 2) nVertices = 2; else if (plane == null && nVertices != 2) @@ -764,7 +785,7 @@ return; float f = newScale / mesh.scale; mesh.scale = newScale; - if (mesh.haveXyPoints) + if (mesh.haveXyPoints || mesh.drawType == JmolConstants.DRAW_ARC) return; // done in renderer Vector3f diff = new Vector3f(); int iptlast = -1; @@ -1029,6 +1050,9 @@ int nVertices = mesh.drawVertexCount > 0 ? mesh.drawVertexCount : mesh.drawVertexCounts[iModel >= 0 ? iModel : 0]; switch (mesh.drawTypes == null ? mesh.drawType : mesh.drawTypes[iModel]) { + case JmolConstants.DRAW_ARC: + str.append(mesh.isVector ? " ARROW ARC" : " ARC"); + break; case JmolConstants.DRAW_ARROW: str.append(mesh.isVector ? " VECTOR" : " ARROW"); break; @@ -1086,11 +1110,12 @@ try { if (iModel >= mesh.polygonIndexes.length) iModel = 0; // arrows and curves may not have multiple model representations + boolean adjustPt = (mesh.isVector && mesh.drawType != JmolConstants.DRAW_ARC); for (int i = 0; i < nVertices; i++) { Point3f pt = mesh.vertices[mesh.polygonIndexes[iModel][i]]; if (pt.z == Float.MAX_VALUE || pt.z == -Float.MAX_VALUE) { str += (i == 0 ? " " : " ,") + "[" + (int) pt.x + " " + (int) pt.y + (pt.z < 0 ? " %]" : "]"); - } else if (mesh.isVector && i == 1){ + } else if (adjustPt && i == 1){ Point3f pt1 = new Point3f(pt); pt1.sub(mesh.vertices[mesh.polygonIndexes[iModel][0]]); str += " " + Escape.escape(pt1); Modified: trunk/Jmol/src/org/jmol/shapespecial/DrawRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/shapespecial/DrawRenderer.java 2008-07-14 09:02:48 UTC (rev 9592) +++ trunk/Jmol/src/org/jmol/shapespecial/DrawRenderer.java 2008-07-15 13:33:46 UTC (rev 9593) @@ -24,6 +24,8 @@ package org.jmol.shapespecial; +import javax.vecmath.AxisAngle4f; +import javax.vecmath.Matrix3f; import javax.vecmath.Point3f; import javax.vecmath.Vector3f; @@ -35,6 +37,13 @@ private int drawType; private DrawMesh dmesh; + + private Point3f[] controlHermites; + private final Point3f vpt0 = new Point3f(); + private final Point3f vpt1 = new Point3f(); + private final Point3f vpt2 = new Point3f(); + private final Vector3f vTemp = new Vector3f(); + private final Vector3f vTemp2 = new Vector3f(); protected void render() { /* @@ -54,22 +63,24 @@ return Draw.isPolygonDisplayable(dmesh, i) && (dmesh.modelFlags == null || dmesh.modelFlags.get(i)); } - - private Point3f[] controlHermites; - private final Point3f vpt0 = new Point3f(); - private final Point3f vpt1 = new Point3f(); protected void render2() { boolean isDrawPickMode = (viewer.getPickingMode() == JmolConstants.PICKING_DRAW); drawType = dmesh.drawType; diameter = dmesh.diameter; width = dmesh.width; - boolean isCurved = ((drawType == JmolConstants.DRAW_CURVE || drawType == JmolConstants.DRAW_ARROW) && vertexCount >= 2); + int nPoints = vertexCount; + boolean isCurved = ( + (drawType == JmolConstants.DRAW_CURVE + || drawType == JmolConstants.DRAW_ARROW + || drawType == JmolConstants.DRAW_ARC) + && vertexCount >= 2); if (width > 0 && isCurved) { pt1f.set(0, 0, 0); - for (int i = 0; i < vertexCount; i++) + int n = (drawType == JmolConstants.DRAW_ARC ? 2 :vertexCount); + for (int i = 0; i < n; i++) pt1f.add(vertices[i]); - pt1f.scale(1f / vertexCount); + pt1f.scale(1f / n); viewer.transformPoint(pt1f, pt1i); diameter = viewer.scaleToScreen(pt1i.z, (int) (width * 1000)); if (diameter == 0) @@ -104,15 +115,66 @@ case JmolConstants.DRAW_CURVE: //unnecessary break; + case JmolConstants.DRAW_ARC: + //renderArrowHead(controlHermites[nHermites - 2], controlHermites[nHermites - 1], false); + // + // {pt1} {pt2} {ptref} {starting theta, nDegrees, fractionalOffset} + float theta = vertices[3].x; + float nDegrees = vertices[3].y; + float fractionalOffset = vertices[3].z; + vTemp.set(vertices[1]); + vTemp.sub(vertices[0]); + // crossing point + pt1f.scaleAdd(fractionalOffset, vTemp, vertices[0]); + // define rotational axis + Matrix3f mat = new Matrix3f(); + mat.set(new AxisAngle4f(vTemp, (float) (theta * Math.PI / 180))); + // vector to rotate + vTemp2.set(vertices[2]); + vTemp2.sub(vertices[0]); + vTemp2.cross(vTemp, vTemp2); + vTemp2.cross(vTemp2, vTemp); + vTemp2.normalize(); + vTemp2.scale(dmesh.scale); + mat.transform(vTemp2); + //control points + float degrees = nDegrees / 5; + while (Math.abs(degrees) > 5) + degrees /= 2; + nPoints = (int) (nDegrees / degrees + 0.5f) + 1; + while (nPoints < 10) { + degrees /= 2; + nPoints = (int) (nDegrees / degrees + 0.5f) + 1; + } + mat.set(new AxisAngle4f(vTemp, (float) (degrees * Math.PI / 180))); + screens = viewer.allocTempScreens(nPoints); + int iBase = nPoints - (dmesh.scale < 2 ? 3 : 3); + for (int i = 0; i < nPoints; i++) { + if (i == iBase) + vpt0.set(vpt1); + vpt1.scaleAdd(1, vTemp2, pt1f); + if (i == 0) + vpt2.set(vpt1); + viewer.transformPoint(vpt1, screens[i]); + mat.transform(vTemp2); + } + if (dmesh.isVector && !dmesh.nohead) { + renderArrowHead(vpt0, vpt1, 0.3f, false); + viewer.transformPoint(pt1f, screens[nPoints - 1]); + } + pt1f.set(vpt2); + break; case JmolConstants.DRAW_ARROW: int nHermites = 5; if (controlHermites == null || controlHermites.length < nHermites + 1) { controlHermites = new Point3f[nHermites + 1]; } + float d = 0; if (vertexCount == 2) { if (controlHermites[nHermites - 1] == null) { controlHermites[nHermites - 2] = new Point3f(vertices[0]); controlHermites[nHermites - 1] = new Point3f(vertices[1]); + d = vertices[1].distance(vertices[0]); } else { controlHermites[nHermites - 2].set(vertices[0]); controlHermites[nHermites - 1].set(vertices[1]); @@ -123,16 +185,16 @@ vertices[vertexCount - 1], vertices[vertexCount - 1], controlHermites, 0, nHermites); } - renderArrowHead(controlHermites[nHermites - 2], controlHermites[nHermites - 1], false); + renderArrowHead(controlHermites[nHermites - 2], controlHermites[nHermites - 1], d, false); break; } if (diameter == 0) diameter = 3; if (isCurved) { - for (int i = 0, i0 = 0; i < vertexCount - 1; i++) { + for (int i = 0, i0 = 0; i < nPoints - 1; i++) { g3d.fillHermite(tension, diameter, diameter, diameter, screens[i0], screens[i], screens[i + 1], screens[i - + (i + 2 == vertexCount ? 1 : 2)]); + + (i == nPoints - 2 ? 1 : 2)]); i0 = i; } } @@ -140,7 +202,7 @@ if (isDrawPickMode && !isGenerator) { renderHandles(); } - } +} private void renderXyArrow(int ptXY) { int ptXYZ = 1 - ptXY; @@ -157,11 +219,10 @@ if (diameter == 0) diameter = 1; renderLine(vpt0, vpt1, diameter, Graphics3D.ENDCAPS_FLAT, pt1i, pt2i); - renderArrowHead(vpt0, vpt1, true); + renderArrowHead(vpt0, vpt1, 0, true); } - private Vector3f tip = new Vector3f(); - private void renderArrowHead(Point3f pt1, Point3f pt2, boolean isTransformed) { + private void renderArrowHead(Point3f pt1, Point3f pt2, float factor2, boolean isTransformed) { if (dmesh.nohead) return; float fScale = dmesh.drawArrowScale; @@ -171,18 +232,22 @@ fScale = 0.5f; if (isTransformed) fScale *= 40; + if (factor2 > 0) + fScale *= factor2; + pt1f.set(pt1); pt2f.set(pt2); - tip.set(pt2f); - tip.sub(pt1f); - float d = tip.length(); + float d = pt1f.distance(pt2f); if (d == 0) return; - tip.scale(fScale / d / 5); - pt2f.add(tip); - tip.scale(5); + vTemp.set(pt2f); + vTemp.sub(pt1f); + vTemp.normalize(); + vTemp.scale(fScale / 5); + pt2f.add(vTemp); + vTemp.scale(5); pt1f.set(pt2f); - pt1f.sub(tip); + pt1f.sub(vTemp); if (isTransformed) { pt1i.set((int)pt1f.x, (int)pt1f.y, (int)pt1f.z); pt2i.set((int)pt2f.x, (int)pt2f.y, (int)pt2f.z); @@ -196,8 +261,8 @@ if (diameter > 0) { headDiameter = diameter * 3; } else { - tip.set(pt2i.x - pt1i.x, pt2i.y - pt1i.y, pt2i.z - pt1i.z); - headDiameter = (int) (tip.length() * .5); + vTemp.set(pt2i.x - pt1i.x, pt2i.y - pt1i.y, pt2i.z - pt1i.z); + headDiameter = (int) (vTemp.length() * .5); diameter = headDiameter / 5; } if (diameter < 1) @@ -243,8 +308,11 @@ if (s.length() > 1 && s.charAt(0) == '>') { pt = dmesh.polygonIndexes[i].length - 1; s = s.substring(1); - } - viewer.transformPoint(vertices[dmesh.polygonIndexes[i][pt]], pt1i); + if (drawType == JmolConstants.DRAW_ARC) + pt1f.set(pt2f); + } else if (drawType != JmolConstants.DRAW_ARC) + pt1f.set(vertices[dmesh.polygonIndexes[i][pt]]); + viewer.transformPoint(pt1f, pt1i); int offset = (int) (5 * imageFontScaling); g3d.drawString(s, null, pt1i.x + offset, pt1i.y - offset, pt1i.z, pt1i.z); Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-07-14 09:02:48 UTC (rev 9592) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-07-15 13:33:46 UTC (rev 9593) @@ -1698,7 +1698,6 @@ error(ERROR_unrecognizedExpression); } } - Logger.setActiveLevel(Logger.LEVEL_DEBUG, true); expressionResult = rpn.getResult(allowUnderflow, null); if (expressionResult == null) { if (allowUnderflow) @@ -4462,8 +4461,13 @@ String type = optParameterAsString(pt).toLowerCase(); switch (datatype) { case JmolConstants.JMOL_DATA_RAMACHANDRAN: + if (type.equalsIgnoreCase("draw")) { + isDraw = true; + type = optParameterAsString(--pt).toLowerCase(); + } isRamachandranRelative = (pt > pt0 && type.startsWith("r")); - type = "ramachandran" + (isRamachandranRelative ? " r" : ""); + type = "ramachandran" + (isRamachandranRelative ? " r" : "") + + (isDraw ? " draw" : ""); break; case JmolConstants.JMOL_DATA_QUATERNION: isQuaternion = true; @@ -4493,7 +4497,7 @@ if (modelIndex < 0) error(ERROR_multipleModelsNotOK, type); modelIndex = viewer.getJmolDataSourceFrame(modelIndex); - if (isQuaternion && isDraw) { + if (isDraw) { runScript(viewer.getPdbData(modelIndex, type)); return; } @@ -8691,9 +8695,19 @@ type = "QUAT"; break; case Token.ramachandran: + pt++; + type2 = Token.sValue(tokenAt(pt, args)).toLowerCase(); + if (Parser.isOneOf(type2, "r")) + pt++; + else + type2 = ""; + type = Token.sValue(tokenAt(pt, args)).toLowerCase(); + if (type.equals("draw")) { + type2 += " draw"; + pt++; + } + type2 = "ramachandran " + type2; type = "RAMA"; - type2 = "ramachandran"; - pt++; break; case Token.function: type = "FUNCS"; @@ -9509,6 +9523,10 @@ dataFrame(JmolConstants.JMOL_DATA_QUATERNION); return; } + if (tokAt(1) == Token.ramachandran) { + dataFrame(JmolConstants.JMOL_DATA_RAMACHANDRAN); + return; + } boolean havePoints = false; boolean isInitialized = false; boolean isSavedState = false; @@ -9622,6 +9640,10 @@ propertyName = "arrow"; break; } + if (str.equalsIgnoreCase("ARC")) { + propertyName = "arc"; + break; + } if (str.equalsIgnoreCase("CIRCLE")) { propertyName = "circle"; break; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-14 09:02:48 UTC (rev 9592) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-15 13:33:46 UTC (rev 9593) @@ -3,6 +3,23 @@ version=11.5.47_dev +# new feature: draw ARC {pt1} {pt2} {ptref} {theta0, nDegrees, fractionalOffset} +# new feature: draw ARROW ARC {pt1} {pt2} {ptref} {theta0, nDegrees, fractionalOffset} +# +# draws a circular arc or arrow around an axis defined by {pt1} and {pt2} +# using {ptref} as a starting point (looking down the axis, angles +# are measured in a clockwise manner, starting with the projected position +# of {ptref} in a plane perpendicular to the axis. This is similar (but opposite) +# to the way dihedral angles are indicated. +# theta0 is the the offset angle from 0 +# nDegrees is the number of degrees of arc to draw +# fractionalOffset is the fraction of the distance from {pt1} to {pt2} for the +# plane containing the arc. +# +# new feature: draw RAMACHANDRAN +# draws phi and psi angles in the form of draw ARROW ARC +# new feature: write RAMACHANDRAN draw + # ----------------------------------------------------------------------------- #version=11.5.46 Modified: trunk/Jmol/src/org/jmol/viewer/JmolConstants.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2008-07-14 09:02:48 UTC (rev 9592) +++ trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2008-07-15 13:33:46 UTC (rev 9593) @@ -94,6 +94,7 @@ public final static int DRAW_CIRCLE = 16; public final static int DRAW_CURVE = 17; public static final int DRAW_CIRCULARPLANE = 18; + public final static int DRAW_ARC = 19; public static String getDrawTypeName(int drawType) { switch (drawType) { @@ -111,6 +112,8 @@ return "plane"; case JmolConstants.DRAW_ARROW: return "arrow"; + case JmolConstants.DRAW_ARC: + return "arc"; case JmolConstants.DRAW_CIRCLE: case JmolConstants.DRAW_CIRCULARPLANE: return "circle"; Modified: trunk/Jmol/src/org/openscience/jmol/app/ScriptWindow.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/ScriptWindow.java 2008-07-14 09:02:48 UTC (rev 9592) +++ trunk/Jmol/src/org/openscience/jmol/app/ScriptWindow.java 2008-07-15 13:33:46 UTC (rev 9593) @@ -278,8 +278,6 @@ viewer.evalStringQuiet(state); undoPointer = ptr; } - //for (int i =0; i < 10; i++) - //System.out.println("stack: " + undoPointer + " / " + i + " " +(undoStack[i] == null ? 0 : undoStack[i].length())); undoSetEnabled(); } @@ -363,7 +361,6 @@ } else { runButton.setEnabled(true); haltButton.setEnabled(true); - //System.out.println("Scriptwindow sending "+ strCommand + " " + Thread.currentThread().toString()); viewer.script(strCommand); } } @@ -475,42 +472,38 @@ { // Id Control key is down, captures events does command // history recall and inhibits caret vertical shift. - if (ke.getKeyCode() == KeyEvent.VK_UP - && ke.getID() == KeyEvent.KEY_PRESSED - && !ke.isControlDown()) - { + + int kcode = ke.getKeyCode(); + int kid = ke.getID(); + if (kcode == KeyEvent.VK_UP + && kid == KeyEvent.KEY_PRESSED + && !ke.isControlDown()) { recallCommand(true); - } - else if ( - ke.getKeyCode() == KeyEvent.VK_DOWN - && ke.getID() == KeyEvent.KEY_PRESSED - && !ke.isControlDown()) - { + } else if ( + kcode == KeyEvent.VK_DOWN + && kid == KeyEvent.KEY_PRESSED + && !ke.isControlDown()) { recallCommand(false); - } - // If Control key is down, redefines the event as if it - // where a key up or key down stroke without modifiers. - // This allows to move the caret up and down - // with no command history recall. - else if ( - (ke.getKeyCode() == KeyEvent.VK_DOWN - || ke.getKeyCode() == KeyEvent.VK_UP) - && ke.getID() == KeyEvent.KEY_PRESSED - && ke.isControlDown()) - { + } else if ( + (kcode == KeyEvent.VK_DOWN + || kcode == KeyEvent.VK_UP) + && kid == KeyEvent.KEY_PRESSED + && ke.isControlDown()) { + // If Control key is down, redefines the event as if it + // where a key up or key down stroke without modifiers. + // This allows to move the caret up and down + // with no command history recall. super .processKeyEvent(new KeyEvent( (Component) ke.getSource(), - ke.getID(), + kid, ke.getWhen(), 0, // No modifiers - ke.getKeyCode(), + kcode, ke.getKeyChar(), ke.getKeyLocation())); - } - // Standard processing for other events. - else - { + } else { + // Standard processing for other events. super.processKeyEvent(ke); //check command for compiler-identifyable syntax issues //this may have to be taken out if people start complaining @@ -518,9 +511,8 @@ //that is -- that the script itself is not being fully checked //not perfect -- help here? - int kcode = ke.getID(); - if (kcode == KeyEvent.KEY_RELEASED && ke.getModifiers() < 2 - && (kcode > KeyEvent.VK_DOWN || kcode == KeyEvent.VK_BACK_SPACE)) + if (kid == KeyEvent.KEY_RELEASED && ke.getModifiers() < 2 + && (kcode > KeyEvent.VK_DOWN && kcode < 400 || kcode == KeyEvent.VK_BACK_SPACE)) checkCommand(); } } @@ -550,12 +542,9 @@ synchronized void checkCommand() { String strCommand = consoleDoc.getCommandString(); - //System.out.println(Token.getCommandSet(strCommand)); if (strCommand.length() == 0 || strCommand.charAt(0) == '!' || viewer.isScriptExecuting()) return; - //System.out.println("Scrpt WIndow checking command:" + strCommand + " " - // + Thread.currentThread().toString()); checking = true; consoleDoc .colorCommand(viewer.scriptCheck(strCommand) == null ? consoleDoc.attUserInput This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |