Author: kono
Date: 2009-11-24 13:24:51 -0800 (Tue, 24 Nov 2009)
New Revision: 18565

Modified:
   cytoscape/trunk/src/cytoscape/util/NestedNetworkImageManager.java
Log:
Still not working.  Need to fix empty image map.

Modified: cytoscape/trunk/src/cytoscape/util/NestedNetworkImageManager.java
===================================================================
--- cytoscape/trunk/src/cytoscape/util/NestedNetworkImageManager.java   
2009-11-24 19:52:03 UTC (rev 18564)
+++ cytoscape/trunk/src/cytoscape/util/NestedNetworkImageManager.java   
2009-11-24 21:24:51 UTC (rev 18565)
@@ -16,9 +16,14 @@
 import java.awt.image.PixelGrabber;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.io.IOException;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
+import javax.imageio.ImageIO;
 import javax.swing.ImageIcon;
 
 import cytoscape.CyNetwork;
@@ -32,7 +37,7 @@
 
 
 public class NestedNetworkImageManager implements PropertyChangeListener {
-       private static final Image DEF_IMAGE;
+       private final Image DEF_IMAGE;
        
        private static final int DEF_WIDTH = 100;
        private static final int DEF_HEIGHT = 100;
@@ -42,8 +47,12 @@
        private final Map<CyNetwork, ImageAndReferenceCount> networkToImageMap;
        
        static {
-               networkImageGenerator = new NestedNetworkImageManager();
-               DEF_IMAGE = (new 
ImageIcon(Cytoscape.class.getResource("/cytoscape/images/default_network.png"))).getImage();
+               try {
+                       networkImageGenerator = new NestedNetworkImageManager();
+               } catch (IOException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
        }
 
        
@@ -52,7 +61,8 @@
        }
 
 
-       private NestedNetworkImageManager() {
+       private NestedNetworkImageManager() throws IOException {
+               DEF_IMAGE = 
ImageIO.read(Cytoscape.class.getResource("/cytoscape/images/default_network.png"));
                networkToImageMap = new HashMap<CyNetwork, 
ImageAndReferenceCount>();
                
Cytoscape.getPropertyChangeSupport().addPropertyChangeListener(this);
                
@@ -60,6 +70,11 @@
        
        
        public Image getImage(final CyNetwork network) {
+               
+               System.out.println("!!!!!! Image map size = " + 
this.networkToImageMap.size() + 
+                               ", network = " + network + ", val = " + 
networkToImageMap.get(network));
+               
+               
                if (networkToImageMap.get(network) == null) {
                        return null;
                } else {
@@ -91,17 +106,47 @@
                } else if 
(CytoscapeDesktop.NETWORK_VIEW_CREATED.equals(evt.getPropertyName())) {
                        //TODO: Need to sync. image update timing.
                        final CyNetworkView view = 
(CyNetworkView)evt.getNewValue();
-                       final CyNetwork network = view.getNetwork();
-                       for (final Object node : network.nodesList()) {
-                               final CyNode cyNode = (CyNode)node;
-                               final GraphPerspective nestedNetwork = 
cyNode.getNestedNetwork();
+                       final CyNetwork viewNetwork = view.getNetwork();
+                       if (networkToImageMap.containsKey(viewNetwork)) {
+                               updateImage(viewNetwork, view);
+                               refreshViews(viewNetwork);
+                       }
+                       
+                       boolean updateView = false;
+                       for (final CyNode node: 
(List<CyNode>)viewNetwork.nodesList()) {
+                               final CyNetwork nestedNetwork = (CyNetwork) 
node.getNestedNetwork();
                                if (nestedNetwork != null) {
-                                       updateImage((CyNetwork)nestedNetwork, 
Cytoscape.getNetworkView(((CyNetwork)nestedNetwork).getIdentifier()));
-                                       addCustomGraphics(network, 
Cytoscape.getNetworkView(network.getIdentifier()), cyNode);
+                                       updateView = true;
+                                       addCustomGraphics(viewNetwork, view, 
node);
                                }
                        }
+                       if (updateView) {
+                               view.updateView();
+                       }
+                       
+                       System.out.println("**** updating network: " + 
viewNetwork.getTitle());                 
+                       refreshViews(viewNetwork);
                }
        }
+       
+       
+       private void refreshViews(final CyNetwork nestedNetwork) {
+               final List<CyNode> nodes = Cytoscape.getRootGraph().nodesList();
+               final Set<CyNetworkView> updateViews = new 
HashSet<CyNetworkView>();
+               for (final CyNode node: nodes) {
+                       if (node.getNestedNetwork() == nestedNetwork) {
+                               for (final CyNetworkView view: 
Cytoscape.getNetworkViewMap().values()) {
+                                       if (view.getNodeView(node) != null) {
+                                               updateViews.add(view);
+                                       }
+                               }
+                       }
+               }
+               
+               for (final CyNetworkView view: updateViews) {
+                       view.updateView();
+               }
+       }
 
        
        private void updateImage(CyNetwork network, CyNetworkView view) {
@@ -111,96 +156,28 @@
                        networkToImageMap.put(network, new 
ImageAndReferenceCount(DEF_IMAGE));
                } else {
                        // Create image from this view.
-                       System.out.println("*************View FOUND for: " + 
network.getTitle() +" == " + view.getNetwork().getTitle());
                        final DGraphView dView = (DGraphView) view;
-                       networkToImageMap.put(network, new 
ImageAndReferenceCount(dView.createImage(DEF_WIDTH, DEF_HEIGHT, 1.0)));
+                       final Image image = dView.createImage(DEF_WIDTH, 
DEF_HEIGHT, 1.0);
+                       System.out.println("*************View FOUND for: " + 
network.getTitle() +" == " + view.getNetwork().getTitle() + image);
+                       networkToImageMap.put(network, new 
ImageAndReferenceCount(image));
                }
        }
 
        
        private void addCustomGraphics(final CyNetwork network, final 
CyNetworkView dView, final CyNode parentNode) {
                System.out.println("*** Adding custom graphics: Count = " + 
dView.getNodeViewCount() + " node = " + parentNode.getIdentifier());
-               final Image networkImage = getImage(network);
-               final BufferedImage img = toBufferedImage(networkImage == null 
? DEF_IMAGE : networkImage);
+               Image networkImage = getImage(network);
                final DNodeView nodeView = 
(DNodeView)dView.getNodeView(parentNode);
                final Rectangle2D rect = new Rectangle2D.Double(-50.0, -50.0, 
50.0, 50.0);
                
-               System.out.println("*** ADD CUSTOM: " + nodeView);
+               System.out.println("*** ADD CUSTOM: " + nodeView + ", IMG = " + 
networkImage +", RECT = " + rect);
                if (nodeView != null) {
-                       nodeView.addCustomGraphic(rect, new TexturePaint(img, 
rect), NodeDetails.ANCHOR_CENTER);
+                       if (networkImage == null) {
+                               networkImage = DEF_IMAGE;
+                       }
+                       nodeView.addCustomGraphic(rect, new 
TexturePaint((BufferedImage) networkImage, rect), NodeDetails.ANCHOR_CENTER);
                }
        }
-
-
-       private BufferedImage toBufferedImage(Image image) {
-               if (image instanceof BufferedImage) {
-                       return (BufferedImage)image;
-               }
-           
-               // This code ensures that all the pixels in the image are loaded
-               image = new ImageIcon(image).getImage();
-           
-               // Determine if the image has transparent pixels; for this 
method's
-               // implementation, see e661 Determining If an Image Has 
Transparent Pixels
-               boolean hasAlpha = hasAlpha(image);
-           
-               // Create a buffered image with a format that's compatible with 
the screen
-               BufferedImage bimage = null;
-               GraphicsEnvironment ge = 
GraphicsEnvironment.getLocalGraphicsEnvironment();
-               try {
-                       // Determine the type of transparency of the new 
buffered image
-                       int transparency = Transparency.OPAQUE;
-                       if (hasAlpha) {
-                               transparency = Transparency.BITMASK;
-                       }
-           
-                       // Create the buffered image
-                       GraphicsDevice gs = ge.getDefaultScreenDevice();
-                       GraphicsConfiguration gc = gs.getDefaultConfiguration();
-                       bimage = gc.createCompatibleImage(image.getWidth(null), 
image.getHeight(null), transparency);
-               } catch (final HeadlessException e) {
-                       // The system does not have a screen
-               }
-           
-               if (bimage == null) {
-                   // Create a buffered image using the default color model
-                   int type = BufferedImage.TYPE_INT_RGB;
-                   if (hasAlpha) {
-                       type = BufferedImage.TYPE_INT_ARGB;
-                   }
-                   bimage = new BufferedImage(image.getWidth(null), 
image.getHeight(null), type);
-               }
-
-               // Copy image to buffered image
-               Graphics g = bimage.createGraphics();
-
-               // Paint the image onto the buffered image
-               g.drawImage(image, 0, 0, null);
-               g.dispose();
-           
-               return bimage;
-        }
-
-        
-        private boolean hasAlpha(final Image image) {
-                // If buffered image, the color model is readily available
-                if (image instanceof BufferedImage) {
-                        BufferedImage bimage = (BufferedImage)image;
-                        return bimage.getColorModel().hasAlpha();
-                }
-           
-                // Use a pixel grabber to retrieve the image's color model;
-                // grabbing a single pixel is usually sufficient
-                PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
-                try {
-                        pg.grabPixels();
-                } catch (final InterruptedException e) {
-                }
-           
-                // Get the image's color model
-                ColorModel cm = pg.getColorModel();
-                return cm.hasAlpha();
-       }
        
        
        private static class ImageAndReferenceCount {

--

You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.


Reply via email to