Revision: 20315
          http://sourceforge.net/p/jmol/code/20315
Author:   hansonr
Date:     2015-02-22 21:14:41 +0000 (Sun, 22 Feb 2015)
Log Message:
-----------
Jmol.___JmolVersion="14.3.12_2015.02.22b"

bug fix: JavaScript -2.format("%8.3") gives 2.000 not -2.000

Modified Paths:
--------------
    trunk/Jmol/src/javajs/api/GenericPlatform.java
    trunk/Jmol/src/javajs/util/DF.java
    trunk/Jmol/src/org/jmol/api/JmolAppConsoleInterface.java
    trunk/Jmol/src/org/jmol/awt/Image.java
    trunk/Jmol/src/org/jmol/awt/Platform.java
    trunk/Jmol/src/org/jmol/awtjs2d/Image.java
    trunk/Jmol/src/org/jmol/awtjs2d/Mouse.java
    trunk/Jmol/src/org/jmol/awtjs2d/Platform.java
    trunk/Jmol/src/org/jmol/console/AppletConsole.java
    trunk/Jmol/src/org/jmol/console/GenericConsole.java
    trunk/Jmol/src/org/jmol/console/JmolConsole.java
    trunk/Jmol/src/org/jmol/consolejs/AppletConsole.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/JmolPanel.java
    trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java
    trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/AppConsole.java

Added Paths:
-----------
    trunk/Jmol/src/org/jmol/api/JmolImageDialog.java
    trunk/Jmol/src/org/jmol/console/ImageDialog.java

Removed Paths:
-------------
    trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/ImageDialog.java

Modified: trunk/Jmol/src/javajs/api/GenericPlatform.java
===================================================================
--- trunk/Jmol/src/javajs/api/GenericPlatform.java      2015-02-22 20:53:08 UTC 
(rev 20314)
+++ trunk/Jmol/src/javajs/api/GenericPlatform.java      2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -2,7 +2,11 @@
 
 
 import java.net.URL;
+import java.util.Map;
 
+import org.jmol.api.JmolImageDialog;
+import org.jmol.viewer.Viewer;
+
 import javajs.awt.Font;
 import javajs.util.P3;
 
@@ -133,4 +137,7 @@
 
   String getLocalUrl(String fileName);
 
+  JmolImageDialog getImageDialog(String title,
+                                 Map<String, JmolImageDialog> imageMap);
+
 }

Modified: trunk/Jmol/src/javajs/util/DF.java
===================================================================
--- trunk/Jmol/src/javajs/util/DF.java  2015-02-22 20:53:08 UTC (rev 20314)
+++ trunk/Jmol/src/javajs/util/DF.java  2015-02-22 21:14:41 UTC (rev 20315)
@@ -92,12 +92,14 @@
     if (decimalDigits >= formattingStrings.length)
       decimalDigits = formattingStrings.length - 1;
     String s1 = ("" + value).toUpperCase();
+    int pt = s1.indexOf(".");
+    if (pt < 0) // specifically JavaScript "-2" not "-2.0"
+      return s1 + formattingStrings[decimalDigits].substring(1);
     boolean isNeg = s1.startsWith("-");
-    if (isNeg)
+    if (isNeg) {
       s1 = s1.substring(1);
-    int pt = s1.indexOf(".");
-    if (pt < 0)
-      return s1 + formattingStrings[decimalDigits].substring(1);
+      pt--;
+    }
     int pt1 = s1.indexOf("E-");
     if (pt1 > 0) {
       n = PT.parseInt(s1.substring(pt1 + 1));

Modified: trunk/Jmol/src/org/jmol/api/JmolAppConsoleInterface.java
===================================================================
--- trunk/Jmol/src/org/jmol/api/JmolAppConsoleInterface.java    2015-02-22 
20:53:08 UTC (rev 20314)
+++ trunk/Jmol/src/org/jmol/api/JmolAppConsoleInterface.java    2015-02-22 
21:14:41 UTC (rev 20315)
@@ -20,5 +20,9 @@
 
   public String getText();
 
+  public Object newJMenu(String key);
 
+  public Object newJMenuItem(String key);
+
+
 }

Added: trunk/Jmol/src/org/jmol/api/JmolImageDialog.java
===================================================================
--- trunk/Jmol/src/org/jmol/api/JmolImageDialog.java                            
(rev 0)
+++ trunk/Jmol/src/org/jmol/api/JmolImageDialog.java    2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -0,0 +1,9 @@
+package org.jmol.api;
+
+public interface JmolImageDialog {
+
+  void closeMe();
+
+  void setImage(Object image);
+
+}


Property changes on: trunk/Jmol/src/org/jmol/api/JmolImageDialog.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Modified: trunk/Jmol/src/org/jmol/awt/Image.java
===================================================================
--- trunk/Jmol/src/org/jmol/awt/Image.java      2015-02-22 20:53:08 UTC (rev 
20314)
+++ trunk/Jmol/src/org/jmol/awt/Image.java      2015-02-22 21:14:41 UTC (rev 
20315)
@@ -42,6 +42,7 @@
 import java.awt.image.Raster;
 import java.awt.image.SinglePixelPackedSampleModel;
 import java.net.URL;
+import java.util.Map;
 
 import javajs.api.PlatformViewer;
 import javajs.img.BMPDecoder;
@@ -51,6 +52,8 @@
 import javax.swing.JPanel;
 
 import org.jmol.api.Interface;
+import org.jmol.api.JmolImageDialog;
+import org.jmol.console.ImageDialog;
 import org.jmol.viewer.Viewer;
 
 /**
@@ -260,4 +263,10 @@
     ((java.awt.Graphics) graphicForText).dispose();
   }
 
+  public static JmolImageDialog getImageDialog(PlatformViewer vwr,
+                                               String title,
+                                               Map<String, JmolImageDialog> 
imageMap) {
+    return new ImageDialog((Viewer) vwr, title, imageMap);
+    }
+
 }

Modified: trunk/Jmol/src/org/jmol/awt/Platform.java
===================================================================
--- trunk/Jmol/src/org/jmol/awt/Platform.java   2015-02-22 20:53:08 UTC (rev 
20314)
+++ trunk/Jmol/src/org/jmol/awt/Platform.java   2015-02-22 21:14:41 UTC (rev 
20315)
@@ -9,6 +9,7 @@
 import java.net.URL;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Map;
 
 import javax.swing.JDialog;
 
@@ -16,6 +17,8 @@
 import netscape.javascript.JSObject;
 
 import org.jmol.api.Interface;
+import org.jmol.api.JmolImageDialog;
+import org.jmol.viewer.Viewer;
 
 import javajs.api.GenericPlatform;
 import javajs.api.GenericFileInterface;
@@ -315,5 +318,11 @@
     return AwtFile.getLocalUrl(newFile(fileName));
   }
 
+  @Override
+  public JmolImageDialog getImageDialog(String title,
+                                        Map<String, JmolImageDialog> imageMap) 
{
+    return Image.getImageDialog(vwr, title, imageMap);
+  }
+
     
 }

Modified: trunk/Jmol/src/org/jmol/awtjs2d/Image.java
===================================================================
--- trunk/Jmol/src/org/jmol/awtjs2d/Image.java  2015-02-22 20:53:08 UTC (rev 
20314)
+++ trunk/Jmol/src/org/jmol/awtjs2d/Image.java  2015-02-22 21:14:41 UTC (rev 
20315)
@@ -25,6 +25,11 @@
 
 package org.jmol.awtjs2d;
 
+import java.util.Map;
+
+import org.jmol.api.JmolImageDialog;
+import org.jmol.viewer.Viewer;
+
 import javajs.awt.Font;
 
 /**
@@ -185,4 +190,19 @@
       return null;
     }
   }
+
+  public static JmolImageDialog getImageDialog(Viewer vwr,
+                                               String title,
+                                               Map<String, JmolImageDialog> 
imageMap) {
+    //TODO
+    
+    /**
+     * @j2sNative
+     * 
+     * return null;
+     */
+    {
+      return null;
+    }
+  }
 }

Modified: trunk/Jmol/src/org/jmol/awtjs2d/Mouse.java
===================================================================
--- trunk/Jmol/src/org/jmol/awtjs2d/Mouse.java  2015-02-22 20:53:08 UTC (rev 
20314)
+++ trunk/Jmol/src/org/jmol/awtjs2d/Mouse.java  2015-02-22 21:14:41 UTC (rev 
20315)
@@ -33,7 +33,6 @@
 import javajs.J2SRequireImport;
 import javajs.api.EventManager;
 import javajs.api.GenericMouseInterface;
-import javajs.api.PlatformViewer;
 import javajs.awt.event.Event;
 import javajs.util.PT;
 import javajs.util.V3;
@@ -58,9 +57,9 @@
    * @param vwr 
    * @param display 
    */
-  public Mouse(double privateKey, PlatformViewer vwr, Object display) {
+  public Mouse(double privateKey, Viewer vwr, Object display) {
     //this.privateKey = privateKey; could be used for clipboard access
-    this.vwr = (Viewer) vwr;
+    this.vwr = vwr;
     manager = this.vwr.acm;
   }
 

Modified: trunk/Jmol/src/org/jmol/awtjs2d/Platform.java
===================================================================
--- trunk/Jmol/src/org/jmol/awtjs2d/Platform.java       2015-02-22 20:53:08 UTC 
(rev 20314)
+++ trunk/Jmol/src/org/jmol/awtjs2d/Platform.java       2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -2,8 +2,10 @@
 
 import java.io.BufferedInputStream;
 import java.net.URL;
+import java.util.Map;
 
 import org.jmol.api.Interface;
+import org.jmol.api.JmolImageDialog;
 import org.jmol.viewer.Viewer;
 
 import javajs.api.GenericPlatform;
@@ -85,7 +87,7 @@
 
   @Override
   public GenericMouseInterface getMouseManager(double privateKey, Object 
display) {
-    return new Mouse(privateKey, vwr, display);
+    return new Mouse(privateKey, (Viewer) vwr, display);
   }
 
   // /// Display
@@ -457,5 +459,11 @@
     return null;
   }
 
+  @Override
+  public JmolImageDialog getImageDialog(String title,
+                                        Map<String, JmolImageDialog> imageMap) 
{
+    return Image.getImageDialog((Viewer) vwr, title, imageMap);
+  }
 
+
 }

Modified: trunk/Jmol/src/org/jmol/console/AppletConsole.java
===================================================================
--- trunk/Jmol/src/org/jmol/console/AppletConsole.java  2015-02-22 20:53:08 UTC 
(rev 20314)
+++ trunk/Jmol/src/org/jmol/console/AppletConsole.java  2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -91,10 +91,10 @@
   public void start(Viewer vwr) {
     setViewer(vwr);
     Component display = (Component) vwr.display;
-    this.vwrFrame = (display instanceof JFrame ? (JFrame) display : null);
+    vwrFrame = (display instanceof JFrame ? (JFrame) display : null);
     JFrame jf = new JFrame();
     jf.setSize(600, 400);
-    this.externalContainer = jf;
+    externalContainer = jf;
     setLabels();
     JTextArea ta = (JTextArea) input;
     ta.setLineWrap(true);
@@ -263,5 +263,4 @@
       }
     }
   }
-
 }

Modified: trunk/Jmol/src/org/jmol/console/GenericConsole.java
===================================================================
--- trunk/Jmol/src/org/jmol/console/GenericConsole.java 2015-02-22 20:53:08 UTC 
(rev 20314)
+++ trunk/Jmol/src/org/jmol/console/GenericConsole.java 2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -49,9 +49,16 @@
   
   protected void setViewer(Viewer vwr) {
     this.vwr = vwr;
+    if (labels == null) {
+      Map<String, String> l = new Hashtable<String, String>();
+      l.put("title", GT._("Jmol Script Console") + " " + 
Viewer.getJmolVersion());
+      setupLabels(l);
+      labels = l;
+    }
+
   }
 
-  protected Map<String, String> labels;
+  protected static Map<String, String> labels;
   protected Map<String, Object> menuMap = new Hashtable<String, Object>();
   protected JmolAbstractButton editButton, runButton, historyButton, 
stateButton;
   protected JmolAbstractButton clearOutButton, clearInButton, loadButton;
@@ -71,14 +78,22 @@
   protected JmolAbstractButton addButton(JmolAbstractButton b, String label) {
     b.addConsoleListener(this);
     menuMap.put(label, b);
-    return b;    
+    return b; 
   }
 
   protected JmolAbstractButton getLabel1() {
     return null;
   }
 
-  protected void setupLabels() {
+  protected void setupLabels(Map<String, String>  labels) {
+    // these three are for ImageDialog 
+    labels.put("saveas", GT._("&Save As..."));
+    labels.put("file", GT._("&File"));
+    labels.put("close", GT._("&Close"));
+    setupLabels0(labels);
+  }
+
+  protected void setupLabels0(Map<String, String>  labels) {
     labels.put("help", GT._("&Help"));
     labels.put("search", GT._("&Search..."));
     labels.put("commands", GT._("&Commands"));
@@ -112,12 +127,7 @@
     GT.setDoTranslate(doTranslate);
   }
 
-  protected String getLabel(String key) {
-    if (labels == null) {
-      labels = new Hashtable<String, String>();
-      labels.put("title", GT._("Jmol Script Console") + " " + 
Viewer.getJmolVersion());
-      setupLabels();
-    }
+  public static String getLabel(String key) {
     return labels.get(key);
   }
 
@@ -275,7 +285,8 @@
     char mnemonic = getMnemonic(label);
     if (mnemonic != ' ')
       ((JmolAbstractButton) button).setMnemonic(mnemonic);
-    menuMap.put(key, button);
+    if (menuMap != null)
+      menuMap.put(key, button);
   }
 
   ///////////// JmolCallbackListener interface
@@ -519,5 +530,4 @@
   }
 
 
-
 }

Copied: trunk/Jmol/src/org/jmol/console/ImageDialog.java (from rev 20311, 
trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/ImageDialog.java)
===================================================================
--- trunk/Jmol/src/org/jmol/console/ImageDialog.java                            
(rev 0)
+++ trunk/Jmol/src/org/jmol/console/ImageDialog.java    2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -0,0 +1,207 @@
+/* $RCSfile$
+ * $Author: hansonr $
+ * $Date: 2014-03-20 17:22:16 -0500 (Thu, 20 Mar 2014) $
+ * $Revision: 19476 $
+ *
+ * Copyright (C) 2002-2005  The Jmol Development Team
+ *
+ * Contact: jmol-develop...@lists.sf.net
+ *
+ *  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.jmol.console;
+
+
+import javajs.util.PT;
+
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+
+import java.awt.BorderLayout;
+import java.awt.Canvas;
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.awt.Image;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.jmol.api.JmolAppConsoleInterface;
+import org.jmol.api.JmolImageDialog;
+import org.jmol.awt.Platform;
+import org.jmol.viewer.Viewer;
+
+public class ImageDialog extends JDialog implements JmolImageDialog, 
WindowListener, ActionListener {
+
+
+  private JMenuBar menubar;
+
+  protected Image image;
+
+  protected Viewer vwr;
+  protected Canvas canvas;
+  private String title;
+  private Map<String, JmolImageDialog> imageMap;
+
+  private JmolAppConsoleInterface console;
+
+  public ImageDialog(Viewer vwr, String title, Map<String, JmolImageDialog> 
imageMap){
+    super(Platform.getWindow((Container) vwr.display) instanceof JFrame ? 
(JFrame) Platform.getWindow((Container) vwr.display) : null, title, false);
+    this.vwr = vwr;
+    console = vwr.getConsole();
+    addWindowListener(this);
+    this.title = title;
+    this.imageMap = imageMap;
+    imageMap.put(title, this);
+    JPanel wrapper = new JPanel(new BorderLayout());
+    wrapper.setBackground(new Color(255,0,0));
+    canvas = new ImageCanvas();
+    wrapper.add(canvas, BorderLayout.CENTER);
+    JPanel container = new JPanel();
+    container.setLayout(new BorderLayout());
+    menubar = new JMenuBar();
+    // see app.jmolpanel.jmol.Properties.Jmol-reseources.properties
+    menubar.add(createMenu());
+    setJMenuBar(menubar);
+    container.add(wrapper, BorderLayout.CENTER);
+    getContentPane().add(container);
+    pack();
+    setLocation(100, 100);
+    setVisible(true);
+  }
+
+  private JMenu createMenu() {
+
+    // Get list of items from resource file:
+    String[] itemKeys = PT.getTokens("saveas close");
+    // Get label associated with this menu:
+    vwr.getConsole();
+    JMenu menu = (JMenu) console.newJMenu("file");
+    // Loop over the items in this menu:
+    for (int i = 0; i < itemKeys.length; i++) {
+      String item = itemKeys[i];
+        JMenuItem mi = createMenuItem(item);
+        menu.add(mi);
+    }
+    menu.setVisible(true);
+    return menu;
+  }
+
+  private JMenuItem createMenuItem(String cmd) {
+    JMenuItem mi = (JMenuItem) console.newJMenuItem(cmd);
+    mi.setActionCommand(cmd);
+    mi.addActionListener(this);
+    mi.setVisible(true);
+    return mi;
+  }
+
+  @Override
+  public void actionPerformed(ActionEvent e) {
+    String cmd = e.getActionCommand();
+    if (cmd.equals("close")) {
+      closeMe();
+    } else if (cmd.equals("saveas")) {
+      saveAs();
+    }
+  }
+
+  private void saveAs() {
+    (new Thread(new Runnable() {
+      @Override
+      public void run() {
+        Map<String, Object>params = new Hashtable<String, Object>();
+        String fname = vwr.dialogAsk("Save Image", "jmol.png", params);
+        if (fname == null)
+          return;
+        String type = "PNG";
+        int pt = fname.lastIndexOf(".");
+        if (pt > 0)
+          type = fname.substring(pt + 1).toUpperCase();
+        params.put("fileName", fname);
+        params.put("type", type);
+        params.put("image", image);
+        vwr.showString(vwr.processWriteOrCapture(params), false);        
+      }
+    }) {
+    }).start();
+  }
+
+  @Override
+  public void closeMe() {
+    imageMap.remove(title);
+    dispose();
+  }
+
+  @Override
+  public void setImage(Object oimage) {
+    if (oimage == null) {
+      closeMe();
+      return;
+    }
+    this.image = (Image) oimage;
+    int w = image.getWidth(null);
+    int h = image.getHeight(null);
+    setTitle(title.substring(title.lastIndexOf("/") + 1) + " [" + w + " x " + h
+        + "]");
+    Dimension d = new Dimension(w, h);
+    canvas.setSize(d);
+    //canvas.setBackground(new Color(55,0,0));
+    //setPreferredSize(d);
+    pack();
+    repaint();
+  }  
+  
+
+  class ImageCanvas extends Canvas {
+    @Override
+    public void paint(Graphics g) {
+      g.drawImage(image, 0, 0, null);
+    }
+  }
+  
+  @Override
+  public void windowClosed(WindowEvent e) {
+  }
+  
+  @Override
+  public void windowOpened(WindowEvent e) {
+  }
+  @Override
+  public void windowClosing(WindowEvent e) {
+    closeMe();
+  }
+  @Override
+  public void windowIconified(WindowEvent e) {
+  }
+  @Override
+  public void windowDeiconified(WindowEvent e) {
+  }
+  @Override
+  public void windowActivated(WindowEvent e) {
+  }
+  @Override
+  public void windowDeactivated(WindowEvent e) {
+  }
+
+}

Modified: trunk/Jmol/src/org/jmol/console/JmolConsole.java
===================================================================
--- trunk/Jmol/src/org/jmol/console/JmolConsole.java    2015-02-22 20:53:08 UTC 
(rev 20314)
+++ trunk/Jmol/src/org/jmol/console/JmolConsole.java    2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -227,4 +227,17 @@
   public void windowOpened(WindowEvent we) {
   }
 
+
+  @Override
+  public Object newJMenu(String key) {
+    return new KeyJMenu(key, getLabel(key), null);
+  }
+
+  @Override
+  public Object newJMenuItem(String key) {
+    return new KeyJMenuItem(key, getLabel(key), null);
+  }
+
+
+
 }

Modified: trunk/Jmol/src/org/jmol/consolejs/AppletConsole.java
===================================================================
--- trunk/Jmol/src/org/jmol/consolejs/AppletConsole.java        2015-02-22 
20:53:08 UTC (rev 20314)
+++ trunk/Jmol/src/org/jmol/consolejs/AppletConsole.java        2015-02-22 
21:14:41 UTC (rev 20315)
@@ -135,4 +135,15 @@
     return null;
   }
 
+  @Override
+  public Object newJMenu(String key) {
+    return null;
+  }
+
+  @Override
+  public Object newJMenuItem(String key) {
+    return null;
+  }
+
+
 }

Modified: trunk/Jmol/src/org/jmol/util/GenericApplet.java
===================================================================
--- trunk/Jmol/src/org/jmol/util/GenericApplet.java     2015-02-22 20:53:08 UTC 
(rev 20314)
+++ trunk/Jmol/src/org/jmol/util/GenericApplet.java     2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -90,7 +90,7 @@
   abstract protected void doShowDocument(URL url);
 
   abstract protected void doShowStatus(String errorMsg);
-
+  
   protected void init(Object applet) {
     callbacks = new Hashtable<CBK, String>();
     if (htRegistry == null)

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-02-22 20:53:08 UTC 
(rev 20314)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -15,18 +15,37 @@
 TODO: remove HTML5 dependency on synchronous file loading (check SCRIPT 
command for problems)
 TODO: implement SHOW IMAGE in JavaScript/Browser 
 
-Jmol.___JmolVersion="14.3.12_2015.02.22"
+Jmol.___JmolVersion="14.3.12_2015.02.22b"
 
+bug fix: JavaScript -2.format("%8.3") gives 2.000 not -2.000
+
+new feature: 
+JmolVersion="14.3.12_2015.02.22"
+
 bug fix: minimizer treats hydrogen bonds as covalent single bonds
 
 new feature: Windows BMP image reading
-
+ -- reads 24-bit (full color) as well as 16-, 8-, 4-, 2-, and 1-bit color 
palette modes
+ -- 14-byte and 40-byte headers only
+ -- does not read compressed modes
+ 
 new feature: (application only) show IMAGE
  -- pops up a frame with the current image
+ -- allows "Save As..."
  
 new feature: (application only) show IMAGE "filename"
  -- pops up a frame with the image loaded from a file
+ -- allows "Save As..."
 
+new feature: (application only) show IMAGE NONE
+ -- closes all image windows
+
+new feature: (application only) write IMAGE
+ -- same as SHOW IMAGE
+ 
+new feature: (application only) write IMAGE 500 500
+ -- similar to SHOW IMAGE; allows customization of width and height
+  
 code: javajs.img.bMPDecoder
 code: org.openscience.jmol.app.jmolpanel.ImageDialog
 

Modified: trunk/Jmol/src/org/jmol/viewer/StatusManager.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/StatusManager.java   2015-02-22 20:53:08 UTC 
(rev 20314)
+++ trunk/Jmol/src/org/jmol/viewer/StatusManager.java   2015-02-22 21:14:41 UTC 
(rev 20315)
@@ -41,6 +41,7 @@
 import org.jmol.api.JmolAppConsoleInterface;
 import org.jmol.api.JmolCallbackListener;
 import org.jmol.api.JmolDialogInterface;
+import org.jmol.api.JmolImageDialog;
 import org.jmol.api.JmolStatusListener;
 import org.jmol.c.CBK;
 import org.jmol.java.BS;
@@ -353,11 +354,37 @@
           new Object[] {sJmol, strInfo, Integer.valueOf(-1), id, 
Float.valueOf(pt.x), Float.valueOf(pt.y), Float.valueOf(pt.z) });
   }
   
+  private Map<String, JmolImageDialog> imageMap;
+
   synchronized void showImage(String title, Object image) {
     String sJmol = jmolScriptCallback(CBK.IMAGE);
     if (notifyEnabled(CBK.IMAGE))
-      cbl.notifyCallback(CBK.IMAGE, 
-          new Object[] {sJmol, title, image });
+      cbl.notifyCallback(CBK.IMAGE, new Object[] { sJmol, title, image });
+    if (title.equalsIgnoreCase("none")) {
+      if (imageMap == null)
+        return;
+      Lst<String> lst = new Lst<String>();
+      for (String key : imageMap.keySet())
+        lst.addLast(key);
+      for (int i = lst.size(); --i >= 0;)
+        imageMap.get(lst.get(i)).closeMe();
+      return;
+    }
+    if (imageMap == null)
+      imageMap = new Hashtable<String, JmolImageDialog>();
+    JmolImageDialog d = imageMap.get(title);
+    System.out.println("statusma1n " + d + " " + image);
+    if (d == null && image != null)
+      d = vwr.apiPlatform.getImageDialog(title, imageMap);
+    System.out.println("statusman2 " + d + " " + image);
+    if (d == null)
+      return;
+    if (image == null)
+      d.closeMe();
+    else
+      d.setImage(image);
+    System.out.println("statusman done");
+
   }
   
   synchronized void setFileLoadStatus(String fullPathName, String fileName,

Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-02-22 20:53:08 UTC (rev 
20314)
+++ trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-02-22 21:14:41 UTC (rev 
20315)
@@ -4822,13 +4822,18 @@
     // Eval
     try {
       if (appConsole == null && showConsole)
-        getProperty("DATA_API", "getAppConsole", Boolean.TRUE);
+        getConsole();
       appConsole.setVisible(true);
     } catch (Throwable e) {
       // no console for this client... maybe no Swing
     }
   }
 
+  public JmolAppConsoleInterface getConsole() {
+   getProperty("DATA_API", "getAppConsole", Boolean.TRUE);
+   return appConsole;
+  }
+  
   @Override
   public Object getParameter(String key) {
     return getP(key);
@@ -7981,7 +7986,7 @@
    */
   void loadImageData(Object image, String nameOrError, String echoName,
                      ScriptContext sc) {
-    if (image == null)
+    if (image == null && !"\1none".equalsIgnoreCase(echoName))
       scriptEcho(nameOrError);
     if (echoName == null) {
       setBackgroundImage((image == null ? null : nameOrError), image);

Deleted: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/ImageDialog.java
===================================================================
--- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/ImageDialog.java  
2015-02-22 20:53:08 UTC (rev 20314)
+++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/ImageDialog.java  
2015-02-22 21:14:41 UTC (rev 20315)
@@ -1,213 +0,0 @@
-/* $RCSfile$
- * $Author: hansonr $
- * $Date: 2014-03-20 17:22:16 -0500 (Thu, 20 Mar 2014) $
- * $Revision: 19476 $
- *
- * Copyright (C) 2002-2005  The Jmol Development Team
- *
- * Contact: jmol-develop...@lists.sf.net
- *
- *  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.openscience.jmol.app.jmolpanel;
-
-
-import javajs.util.PT;
-
-import javax.swing.ImageIcon;
-import javax.swing.JDialog;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.SwingConstants;
-
-import java.awt.BorderLayout;
-import java.awt.Canvas;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.awt.Image;
-import java.util.Hashtable;
-import java.util.Map;
-
-import org.jmol.viewer.Viewer;
-
-class ImageDialog extends JDialog implements WindowListener, ActionListener {
-
-
-  private JMenuBar menubar;
-
-  protected Image image;
-
-  protected Viewer vwr;
-  protected Canvas canvas;
-  private String title;
-  private Map<String, ImageDialog> imageMap;
-  
-  ImageDialog(JmolPanel jmol, Viewer vwr, String title, Map<String, 
ImageDialog> imageMap) {
-    super(jmol.frame, title, false);
-    this.vwr = vwr;
-    addWindowListener(this);
-    this.title = title;
-    this.imageMap = imageMap;
-    imageMap.put(title, this);
-    JPanel wrapper = new JPanel(new BorderLayout());
-    wrapper.setBackground(new Color(255,0,0));
-    canvas = new ImageCanvas();
-    wrapper.add(canvas, BorderLayout.CENTER);
-    JPanel container = new JPanel();
-    container.setLayout(new BorderLayout());
-    menubar = new JMenuBar();
-    // see app.jmolpanel.jmol.Properties.Jmol-reseources.properties
-    menubar.add(createMenu(jmol.guimap, "idfileMenu"));
-    setJMenuBar(menubar);
-    container.add(wrapper, BorderLayout.CENTER);
-    getContentPane().add(container);
-    pack();
-    setLocation(100, 100);
-    setVisible(true);
-  }
-
-  private JMenu createMenu(GuiMap guimap, String key) {
-
-    // Get list of items from resource file:
-    String[] itemKeys = PT.getTokens(JmolResourceHandler.getStringX(key));
-    // Get label associated with this menu:
-    JMenu menu = guimap.newJMenu(key);
-    ImageIcon f = JmolResourceHandler.getIconX(key + "Image");
-    if (f != null) {
-      menu.setHorizontalTextPosition(SwingConstants.RIGHT);
-      menu.setIcon(f);
-    }
-
-    // Loop over the items in this menu:
-    for (int i = 0; i < itemKeys.length; i++) {
-      String item = itemKeys[i];
-      if (item.equals("-")) {
-        menu.addSeparator();
-      } else if (item.endsWith("Menu")) {
-        menu.add(createMenu(guimap, item));
-      } else {
-        JMenuItem mi = createMenuItem(guimap, item);
-        menu.add(mi);
-      }
-    }
-    menu.setVisible(true);
-    return menu;
-  }
-
-  private JMenuItem createMenuItem(GuiMap guimap, String cmd) {
-
-    JMenuItem mi = guimap.newJMenuItem(cmd);
-    ImageIcon f = JmolResourceHandler.getIconX(cmd + "Image");
-    if (f != null) {
-      mi.setHorizontalTextPosition(SwingConstants.RIGHT);
-      mi.setIcon(f);
-    }
-    mi.setActionCommand(cmd);
-    mi.addActionListener(this);
-    mi.setVisible(true);
-    return mi;
-  }
-
-  @Override
-  public void actionPerformed(ActionEvent e) {
-    String cmd = e.getActionCommand();
-    if (cmd.equals("close")) {
-      closeMe();
-    } else if (cmd.equals("saveas")) {
-      saveAs();
-    }
-  }
-
-  private void saveAs() {
-    (new Thread(new Runnable() {
-      @Override
-      public void run() {
-        Map<String, Object>params = new Hashtable<String, Object>();
-        String fname = vwr.dialogAsk("Save Image", "jmol.png", params);
-        if (fname == null)
-          return;
-        String type = "PNG";
-        int pt = fname.lastIndexOf(".");
-        if (pt > 0)
-          type = fname.substring(pt + 1).toUpperCase();
-        params.put("fileName", fname);
-        params.put("type", type);
-        params.put("image", image);
-        vwr.showString(vwr.processWriteOrCapture(params), false);        
-      }
-    }) {
-    }).start();
-  }
-
-  private void closeMe() {
-    imageMap.remove(title);
-    dispose();
-  }
-
-  public void setImage(Image image) {
-    if (image != null) {
-      this.image = image;
-      int w = image.getWidth(null);
-      int h = image.getHeight(null);
-      setTitle(title.substring(title.lastIndexOf("/") + 1) + " [" + w + " x " 
+ h + "]");
-      Dimension d = new Dimension(w, h);
-      canvas.setSize(d);
-      //canvas.setBackground(new Color(55,0,0));
-      //setPreferredSize(d);
-      pack();
-    }
-    repaint();
-  }  
-  
-
-  class ImageCanvas extends Canvas {
-    @Override
-    public void paint(Graphics g) {
-      g.drawImage(image, 0, 0, null);
-    }
-  }
-  
-  @Override
-  public void windowClosed(WindowEvent e) {
-  }
-  
-  @Override
-  public void windowOpened(WindowEvent e) {
-  }
-  @Override
-  public void windowClosing(WindowEvent e) {
-    closeMe();
-  }
-  @Override
-  public void windowIconified(WindowEvent e) {
-  }
-  @Override
-  public void windowDeiconified(WindowEvent e) {
-  }
-  @Override
-  public void windowActivated(WindowEvent e) {
-  }
-  @Override
-  public void windowDeactivated(WindowEvent e) {
-  }
-
-}

Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java
===================================================================
--- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java    
2015-02-22 20:53:08 UTC (rev 20314)
+++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java    
2015-02-22 21:14:41 UTC (rev 20315)
@@ -125,7 +125,7 @@
   protected NBODialog nboDialog;
   protected RecentFilesDialog recentFiles;
   protected AtomSetChooser atomSetChooser;
-  protected JFrame frame;
+  public JFrame frame;
   protected SplashInterface splash;
   protected JFrame consoleframe;  
   protected JsonNioServer service;
@@ -133,7 +133,7 @@
   protected int qualityPNG = -1;
   protected String imageType;
 
-  protected GuiMap guimap = new GuiMap();
+  public GuiMap guimap = new GuiMap();
   private ExecuteScriptAction executeScriptAction;
   private PreferencesDialog preferencesDialog;
   private StatusListener myStatusListener;

Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java
===================================================================
--- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java       
2015-02-22 20:53:08 UTC (rev 20314)
+++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java       
2015-02-22 21:14:41 UTC (rev 20315)
@@ -26,11 +26,14 @@
 import org.jmol.api.JSVInterface;
 import org.jmol.api.JmolAppConsoleInterface;
 import org.jmol.api.JmolCallbackListener;
+import org.jmol.api.JmolImageDialog;
 import org.jmol.api.JmolStatusListener;
 import org.jmol.api.JmolSyncInterface;
 import org.jmol.c.CBK;
+import org.jmol.console.ImageDialog;
 import org.jmol.dialog.Dialog;
 import javajs.awt.Dimension;
+import javajs.util.Lst;
 import javajs.util.PT;
 
 import org.jmol.util.Logger;
@@ -126,9 +129,6 @@
         .toString());
     Map<String, Object> info;
     switch (type) {
-    case IMAGE:
-      notifyImageCreated(strInfo, (Image) data[2]);
-      return;
     case LOADSTRUCT:
       notifyFileLoaded(strInfo, (String) data[2], (String) data[3],
           (String) data[4], (Boolean) data[8]);
@@ -210,6 +210,7 @@
     case DRAGDROP:
     case ERROR:
     case HOVER:
+    case IMAGE:
     case MINIMIZATION:
     case RESIZE:
     case EVAL:
@@ -228,15 +229,6 @@
       appConsole.notifyCallback(type, data);
   }
 
-  private Map<String, ImageDialog> imageMap;
-  private void notifyImageCreated(String title, Image image) {
-    if (imageMap == null)
-      imageMap = new Hashtable<String, ImageDialog>();
-    ImageDialog d = imageMap.get(title);
-    if (d == null)
-      d = new ImageDialog(jmol, vwr, title, imageMap);
-    d.setImage(image);
-  }
 
   /**
    * @param atomIndex  

Modified: 
trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/AppConsole.java
===================================================================
--- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/AppConsole.java   
2015-02-22 20:53:08 UTC (rev 20314)
+++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/console/AppConsole.java   
2015-02-22 21:14:41 UTC (rev 20315)
@@ -33,6 +33,7 @@
 import java.awt.event.ActionEvent;
 import java.net.URL;
 import java.util.List;
+import java.util.Map;
 
 
 import javajs.util.PT;
@@ -159,7 +160,7 @@
   }
 
   @Override
-  protected void setupLabels() {
+  protected void setupLabels0(Map<String, String> labels) {
     labels.put("Check", GT._("Check"));
     labels.put("Clear", GT._("Clear"));
     labels.put("Close", GT._("Close"));

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to