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.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to