Author: kono
Date: 2011-11-15 18:10:39 -0800 (Tue, 15 Nov 2011)
New Revision: 27489

Added:
   core3/impl/trunk/swing-application-impl/src/main/resources/images/README.txt
   
core3/impl/trunk/swing-application-impl/src/main/resources/images/network_32.png
   
core3/impl/trunk/swing-application-impl/src/main/resources/images/network_l_32.png
Removed:
   core3/impl/trunk/swing-application-impl/src/main/resources/images/new/GO.gif
   core3/impl/trunk/swing-application-impl/src/main/resources/images/new/GO2.gif
   
core3/impl/trunk/swing-application-impl/src/main/resources/images/new/GOsmall.gif
   
core3/impl/trunk/swing-application-impl/src/main/resources/images/user-trash.png-README.txt
Modified:
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
Log:
New network panel function implemented.  Networks are managed as sets.  All 
networks created from a same root network will be organized under a tree node.

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
 2011-11-16 01:41:03 UTC (rev 27488)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
 2011-11-16 02:10:39 UTC (rev 27489)
@@ -33,16 +33,20 @@
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Dimension;
-import java.awt.Font;
+import java.awt.Image;
+import java.awt.Toolkit;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+import javax.swing.Icon;
 import javax.swing.InputMap;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
@@ -77,8 +81,12 @@
 import org.cytoscape.model.events.NetworkAboutToBeDestroyedListener;
 import org.cytoscape.model.events.NetworkAddedEvent;
 import org.cytoscape.model.events.NetworkAddedListener;
+import org.cytoscape.model.events.RowSetRecord;
 import org.cytoscape.model.events.RowsSetEvent;
 import org.cytoscape.model.events.RowsSetListener;
+import org.cytoscape.model.subnetwork.CyRootNetwork;
+import org.cytoscape.model.subnetwork.CySubNetwork;
+import org.cytoscape.property.session.Parent;
 import org.cytoscape.task.NetworkCollectionTaskFactory;
 import org.cytoscape.task.NetworkTaskFactory;
 import org.cytoscape.task.NetworkViewCollectionTaskFactory;
@@ -94,28 +102,23 @@
 import org.cytoscape.work.swing.DialogTaskManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import java.util.Collection;
-import org.cytoscape.model.events.RowSetRecord;
-import java.util.Iterator;
 
-public class NetworkPanel extends JPanel implements TreeSelectionListener,
-               SetCurrentNetworkViewListener, SetCurrentNetworkListener,
-               NetworkAddedListener, NetworkViewAddedListener, 
NetworkAboutToBeDestroyedListener,
+public class NetworkPanel extends JPanel implements TreeSelectionListener, 
SetCurrentNetworkViewListener,
+               SetCurrentNetworkListener, NetworkAddedListener, 
NetworkViewAddedListener, NetworkAboutToBeDestroyedListener,
                NetworkViewAboutToBeDestroyedListener, RowsSetListener {
 
        private final static long serialVersionUID = 1213748836763243L;
 
-       static final Color WITH_VIEW = new Color(0x66, 0xCD, 0xAA, 100);
-       static final Color WITH_VIEW_SELECTED = new Color(0x54, 0xFF, 0x9F, 
170);
-       static final Color WITHOUT_VIEW = new Color(0x69, 0x69, 0x69, 50);
-       static final Color WITHOUT_VIEW_SELECTED = new Color(0x69, 0x69, 0x69, 
170);
+       private static final Logger logger = 
LoggerFactory.getLogger(NetworkPanel.class);
+
        static final Color FONT_COLOR = new Color(20, 20, 20);
 
        private static final int TABLE_ROW_HEIGHT = 32;
-       static final Font TABLE_FONT = new Font("SansSerif", Font.PLAIN, 14);
 
-       private static final Logger logger = 
LoggerFactory.getLogger(NetworkPanel.class);
+       private static final Dimension PANEL_SIZE = new Dimension(400, 700);
 
+       private int networkSetCounter;
+
        private final JTreeTable treeTable;
        private final NetworkTreeNode root;
        private JPanel navigatorPanel;
@@ -133,16 +136,20 @@
        private final Map<TaskFactory, CyAction> popupActions;
        private final Map<CyTable, CyNetwork> nameTables;
 
+       private final Map<Long, NetworkTreeNode> treeNodeMap;
+
        /**
         * Constructor for the Network Panel.
         * 
         * @param desktop
         */
-       public NetworkPanel(final CyApplicationManager applicationManager,
-                       final CyNetworkManager netmgr, final 
CyNetworkViewManager networkViewManager,
-                       final BirdsEyeViewHandler bird, final DialogTaskManager 
taskManager) {
+       public NetworkPanel(final CyApplicationManager applicationManager, 
final CyNetworkManager netmgr,
+                       final CyNetworkViewManager networkViewManager, final 
BirdsEyeViewHandler bird,
+                       final DialogTaskManager taskManager) {
                super();
 
+               networkSetCounter = 1;
+               this.treeNodeMap = new HashMap<Long, NetworkTreeNode>();
                this.appManager = applicationManager;
                this.netmgr = netmgr;
                this.networkViewManager = networkViewManager;
@@ -176,22 +183,27 @@
 
        protected void initialize() {
                setLayout(new BorderLayout());
-               setPreferredSize(new Dimension(300, 700));
+               setPreferredSize(PANEL_SIZE);
+               setSize(PANEL_SIZE);
 
                treeTable.getTree().addTreeSelectionListener(this);
                treeTable.getTree().setRootVisible(false);
 
                ToolTipManager.sharedInstance().registerComponent(treeTable);
 
-               treeTable.getTree().setCellRenderer(new TreeCellRenderer(this));
+               treeTable.getTree().setCellRenderer(new 
TreeCellRenderer(treeTable, netmgr, networkViewManager));
+               treeTable.setBackground(Color.white);
+               treeTable.setSelectionBackground(new Color(200, 200, 200, 150));
 
-               treeTable.getColumn("Network").setPreferredWidth(100);
+               treeTable.getColumn("Network").setPreferredWidth(120);
                treeTable.getColumn("Nodes").setPreferredWidth(45);
                treeTable.getColumn("Edges").setPreferredWidth(45);
 
                treeTable.setBackground(Color.WHITE);
                treeTable.setRowHeight(TABLE_ROW_HEIGHT);
                treeTable.setForeground(FONT_COLOR);
+               treeTable.setSelectionForeground(FONT_COLOR);
+               treeTable.setCellSelectionEnabled(true);
 
                navigatorPanel = new JPanel();
                navigatorPanel.setLayout(new BorderLayout());
@@ -238,44 +250,34 @@
        }
 
        public void 
addNetworkCollectionTaskFactory(NetworkCollectionTaskFactory factory, Map 
props) {
-               addFactory(factory, new 
NetworkCollectionTaskFactoryTunableAction(taskManager, factory,
-                               props, appManager));
+               addFactory(factory, new 
NetworkCollectionTaskFactoryTunableAction(taskManager, factory, props, 
appManager));
        }
 
        public void 
removeNetworkCollectionTaskFactory(NetworkCollectionTaskFactory factory, Map 
props) {
                removeFactory(factory);
        }
 
-       public void 
addNetworkViewCollectionTaskFactory(NetworkViewCollectionTaskFactory factory,
-                       Map props) {
-               addFactory(factory, new 
NetworkViewCollectionTaskFactoryTunableAction(taskManager, factory,
-                               props, appManager));
+       public void 
addNetworkViewCollectionTaskFactory(NetworkViewCollectionTaskFactory factory, 
Map props) {
+               addFactory(factory, new 
NetworkViewCollectionTaskFactoryTunableAction(taskManager, factory, props, 
appManager));
        }
 
-       public void 
removeNetworkViewCollectionTaskFactory(NetworkViewCollectionTaskFactory factory,
-                       Map props) {
+       public void 
removeNetworkViewCollectionTaskFactory(NetworkViewCollectionTaskFactory 
factory, Map props) {
                removeFactory(factory);
        }
 
-       public void addNetworkTaskFactory(NetworkTaskFactory factory,
-                       @SuppressWarnings("rawtypes") Map props) {
-               addFactory(factory, new 
NetworkTaskFactoryTunableAction(taskManager, factory, props,
-                               appManager));
+       public void addNetworkTaskFactory(NetworkTaskFactory factory, 
@SuppressWarnings("rawtypes") Map props) {
+               addFactory(factory, new 
NetworkTaskFactoryTunableAction(taskManager, factory, props, appManager));
        }
 
-       public void removeNetworkTaskFactory(NetworkTaskFactory factory,
-                       @SuppressWarnings("rawtypes") Map props) {
+       public void removeNetworkTaskFactory(NetworkTaskFactory factory, 
@SuppressWarnings("rawtypes") Map props) {
                removeFactory(factory);
        }
 
-       public void addNetworkViewTaskFactory(NetworkViewTaskFactory factory,
-                       @SuppressWarnings("rawtypes") Map props) {
-               addFactory(factory, new 
NetworkViewTaskFactoryTunableAction(taskManager, factory, props,
-                               appManager));
+       public void addNetworkViewTaskFactory(NetworkViewTaskFactory factory, 
@SuppressWarnings("rawtypes") Map props) {
+               addFactory(factory, new 
NetworkViewTaskFactoryTunableAction(taskManager, factory, props, appManager));
        }
 
-       public void removeNetworkViewTaskFactory(NetworkViewTaskFactory factory,
-                       @SuppressWarnings("rawtypes") Map props) {
+       public void removeNetworkViewTaskFactory(NetworkViewTaskFactory 
factory, @SuppressWarnings("rawtypes") Map props) {
                removeFactory(factory);
        }
 
@@ -331,8 +333,7 @@
                if (treeTable.getTree().getSelectionPath() != null) { // user 
has
                        // selected
                        // something
-                       treeTableModel.setValueAt(name, 
treeTable.getTree().getSelectionPath()
-                                       .getLastPathComponent(), 0);
+                       treeTableModel.setValueAt(name, 
treeTable.getTree().getSelectionPath().getLastPathComponent(), 0);
                } else { // no selection, means the title has been changed
                        // programmatically
                        NetworkTreeNode node = 
getNetworkNode(network.getSUID());
@@ -352,35 +353,35 @@
        }
 
        public void handleEvent(NetworkAddedEvent e) {
-               CyNetwork net = e.getNetwork();
+               final CyNetwork net = e.getNetwork();
                logger.debug("Got NetworkAddedEvent.  Model ID = " + 
net.getSUID());
 
-               addNetwork(net.getSUID(), -1l);
+               addNetwork(net.getSUID());
                nameTables.put(net.getDefaultNetworkTable(), net);
        }
-       
+
        @Override
        public void handleEvent(RowsSetEvent e) {
 
                // if Selection column has been updated, update the UI
-               Collection<RowSetRecord> rowSetRecords =  
e.getPayloadCollection();
+               Collection<RowSetRecord> rowSetRecords = 
e.getPayloadCollection();
                Iterator<RowSetRecord> it = rowSetRecords.iterator();
-               while (it.hasNext()){
+               while (it.hasNext()) {
                        RowSetRecord record = it.next();
-                       if 
(record.getColumn().equalsIgnoreCase(CyNetwork.SELECTED)){
-                               //Selection column is updated, updated the UI 
+                       if 
(record.getColumn().equalsIgnoreCase(CyNetwork.SELECTED)) {
+                               // Selection column is updated, updated the UI
                                treeTable.getTree().updateUI();
                                break;
                        }
                }
-               
-               CyNetwork n = nameTables.get( e.getSource() );
-               
-               if ( n == null )
+
+               CyNetwork n = nameTables.get(e.getSource());
+
+               if (n == null)
                        return;
-               
+
                final String title = n.getCyRow().get(CyTableEntry.NAME, 
String.class);
-               updateTitle(n, title); // this should updated the UI 
regardless...      
+               updateTitle(n, title); // this should updated the UI 
regardless...
        }
 
        @Override
@@ -413,14 +414,12 @@
        }
 
        public void handleEvent(NetworkViewAboutToBeDestroyedEvent nde) {
-               logger.debug("Network view about to be destroyed "
-                               + nde.getNetworkView().getModel().getSUID());
+               logger.debug("Network view about to be destroyed " + 
nde.getNetworkView().getModel().getSUID());
                treeTable.getTree().updateUI();
        }
 
        public void handleEvent(NetworkViewAddedEvent nde) {
-               logger.debug("Network view added to NetworkPanel: "
-                               + nde.getNetworkView().getModel().getSUID());
+               logger.debug("Network view added to NetworkPanel: " + 
nde.getNetworkView().getModel().getSUID());
 
                // Set current network view to the new one.
                
appManager.setCurrentNetworkView(nde.getNetworkView().getModel().getSUID());
@@ -428,19 +427,39 @@
                treeTable.getTree().updateUI();
        }
 
-       private void addNetwork(final Long network_id, final Long parent_id) {
+       private void addNetwork(final Long network_id) {
                // first see if it exists
                if (getNetworkNode(network_id) == null) {
 
-                       NetworkTreeNode dmtn = new 
NetworkTreeNode(netmgr.getNetwork(network_id).getCyRow()
-                                       .get(CyTableEntry.NAME, String.class), 
network_id);
+                       final CyNetwork network = netmgr.getNetwork(network_id);
 
-                       if (parent_id != null && getNetworkNode(parent_id) != 
null) {
-                               getNetworkNode(parent_id).add(dmtn);
-                       } else {
-                               root.add(dmtn);
+                       NetworkTreeNode parentTreeNode = null;
+                       CyRootNetwork parentNetwork = null;
+                       // In current version, ALL networks are created as 
Subnetworks.
+                       // So, this should be always true.
+                       if (network instanceof CySubNetwork) {
+                               parentNetwork = ((CySubNetwork) 
network).getRootNetwork();
+                               parentTreeNode = 
this.treeNodeMap.get(parentNetwork.getSUID());
                        }
 
+                       if (parentTreeNode == null) {
+                               parentTreeNode = new NetworkTreeNode("Network 
Set " + networkSetCounter, null);
+                               networkSetCounter++;
+                       }
+
+                       // Actual tree node for this network
+                       NetworkTreeNode dmtn = new 
NetworkTreeNode(network.getCyRow().get(CyTableEntry.NAME, String.class),
+                                       network_id);
+
+                       parentTreeNode.add(dmtn);
+
+                       if (treeNodeMap.values().contains(parentTreeNode) == 
false)
+                               root.add(parentTreeNode);
+
+                       // Register top-level node to map
+                       if (parentNetwork != null)
+                               this.treeNodeMap.put(parentNetwork.getSUID(), 
parentTreeNode);
+
                        // apparently this doesn't fire valueChanged
                        treeTable.getTree().collapsePath(new TreePath(new 
TreeNode[] { root }));
 
@@ -453,8 +472,7 @@
                        // this is necessary because valueChanged is not fired 
above
                        focusNetworkNode(network_id);
                } else {
-                       // logger.debug("addNetwork getNetworkTreeNode 
returned: " +
-                       // getNetworkNode(network_id).getNetworkID());
+                       // already in the table.
                }
        }
 
@@ -468,15 +486,18 @@
                }
        }
 
-       public NetworkTreeNode getNetworkNode(Long network_id) {
-               Enumeration tree_node_enum = root.breadthFirstEnumeration();
+       NetworkTreeNode getNetworkNode(Long network_id) {
+               final Enumeration<?> tree_node_enum = 
root.breadthFirstEnumeration();
 
                while (tree_node_enum.hasMoreElements()) {
-                       NetworkTreeNode node = (NetworkTreeNode) 
tree_node_enum.nextElement();
+                       final NetworkTreeNode node = (NetworkTreeNode) 
tree_node_enum.nextElement();
 
-                       if (node.getNetworkID().equals(network_id)) {
+                       Long currentID = node.getNetworkID();
+                       if (currentID == null)
+                               continue;
+
+                       if (node.getNetworkID().equals(network_id))
                                return node;
-                       }
                }
 
                return null;
@@ -485,8 +506,10 @@
        /**
         * This method highlights a network in the NetworkPanel.
         * 
-        * @param e DOCUMENT ME!
+        * @param e
+        *            DOCUMENT ME!
         */
+       @Override
        public void valueChanged(TreeSelectionEvent e) {
                // logger.debug("NetworkPanel: valueChanged - " +
                // e.getSource().getClass().getName());
@@ -499,6 +522,10 @@
                        return;
                }
 
+               // This is a "network set" node.
+               if (node.getNetworkID() == null)
+                       return;
+
                appManager.setCurrentNetwork(node.getNetworkID());
 
                // creates a list of all selected networks
@@ -555,8 +582,7 @@
                                if (row != -1) {
                                        JTree tree = treeTable.getTree();
                                        TreePath treePath = 
tree.getPathForRow(row);
-                                       Long networkID = ((NetworkTreeNode) 
treePath.getLastPathComponent())
-                                                       .getNetworkID();
+                                       Long networkID = ((NetworkTreeNode) 
treePath.getLastPathComponent()).getNetworkID();
 
                                        CyNetwork cyNetwork = 
netmgr.getNetwork(networkID);
 

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
      2011-11-16 01:41:03 UTC (rev 27488)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
      2011-11-16 02:10:39 UTC (rev 27489)
@@ -2,20 +2,25 @@
 
 import javax.swing.tree.DefaultMutableTreeNode;
 
+/**
+ * Custom Tree node in the JTreeTable
+ * 
+ */
 final class NetworkTreeNode extends DefaultMutableTreeNode {
-    private final static long serialVersionUID = 1213748836736485L;
-    protected Long network_uid;
 
-    public NetworkTreeNode(Object userobj, Long id) {
-        super(userobj.toString());
-        network_uid = id;
-    }
+       private final static long serialVersionUID = 1213748836736485L;
 
-    protected void setNetworkID(Long id) {
-        network_uid = id;
-    }
+       // Immutable network SUID. This can be null if the given tree node is 
not
+       // associated with a network.
+       private final Long networkID;
 
-    protected Long getNetworkID() {
-        return network_uid;
-    }
+       
+       NetworkTreeNode(final Object userobj, final Long id) {
+               super(userobj.toString());
+               networkID = id;
+       }
+
+       Long getNetworkID() {
+               return networkID;
+       }
 }
\ No newline at end of file

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
        2011-11-16 01:41:03 UTC (rev 27488)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
        2011-11-16 02:10:39 UTC (rev 27489)
@@ -12,11 +12,13 @@
 
 
 final class NetworkTreeTableModel extends AbstractTreeTableModel {
+       
+       private static final String[] COLUMNS = { "Network", "Nodes", "Edges" };
+       private static final Class<?>[] COLUMN_CLASSES = { 
TreeTableModel.class, String.class, String.class };
+
        private final NetworkPanel networkPanel;
-       String[] columns = { "Network", "Nodes", "Edges" };
-       Class[] columns_class = { TreeTableModel.class, String.class, 
String.class };
-
-       public NetworkTreeTableModel(NetworkPanel networkPanel, Object root) {
+       
+       NetworkTreeTableModel(NetworkPanel networkPanel, Object root) {
                super(root);
                this.networkPanel = networkPanel;
        }
@@ -49,23 +51,39 @@
        }
 
        public int getColumnCount() {
-               return columns.length;
+               return COLUMNS.length;
        }
 
-       public String getColumnName(int column) {
-               return columns[column];
+       
+       @Override
+       public String getColumnName(final int columnIdx) {
+               return COLUMNS[columnIdx];
        }
 
-       public Class getColumnClass(int column) {
-               return columns_class[column];
+       
+       @Override
+       public Class<?> getColumnClass(int column) {
+               return COLUMN_CLASSES[column];
        }
 
-       public Object getValueAt(final Object node, final int column) {
+       
+       @Override
+       public Object getValueAt(final Object value, final int column) {
+               if(value instanceof NetworkTreeNode == false)
+                       return null;
+               
+               final NetworkTreeNode node = (NetworkTreeNode) value;
+               final Long networkID = node.getNetworkID();
+               
+               if(networkID == null) {
+                       // This is root network node
+                       return null;
+               }
+               
                if (column == 0)
-                       return ((DefaultMutableTreeNode) node).getUserObject();
+                       return node.getUserObject();
                else if (column == 1) {
-                       CyNetwork cyNetwork = 
this.networkPanel.netmgr.getNetwork(((NetworkTreeNode) node).getNetworkID());
-
+                       final CyNetwork cyNetwork = 
this.networkPanel.netmgr.getNetwork(node.getNetworkID());
                        return "" + cyNetwork.getNodeCount() + "("
                                + 
cyNetwork.getDefaultNodeTable().getMatchingRows(CyNetwork.SELECTED, 
true).size() + ")";
                } else if (column == 2) {

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
     2011-11-16 01:41:03 UTC (rev 27488)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
     2011-11-16 02:10:39 UTC (rev 27489)
@@ -1,55 +1,96 @@
 package org.cytoscape.internal.view;
 
+import java.awt.Color;
 import java.awt.Component;
+import java.awt.Font;
+import java.awt.Image;
+import java.awt.Toolkit;
 
+import javax.swing.ImageIcon;
 import javax.swing.JTree;
 import javax.swing.tree.DefaultTreeCellRenderer;
 
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNetworkManager;
 import org.cytoscape.model.CyTableEntry;
+import org.cytoscape.util.swing.JTreeTable;
+import org.cytoscape.view.model.CyNetworkViewManager;
 
 final class TreeCellRenderer extends DefaultTreeCellRenderer {
 
-    /**
-     * 
-     */
-    private final NetworkPanel networkPanel;
+       private final static long serialVersionUID = 1213748836751014L;
+       
+       private static final String NETWORK_ICON = "/images/network_32.png";
+       private static final String NETWORK_LEAF_ICON = 
"/images/network_l_32.png";
 
-    /**
-     * @param networkPanel
-     */
-    TreeCellRenderer(NetworkPanel networkPanel) {
-       this.networkPanel = networkPanel;
-    }
+       static final Font TABLE_FONT = new Font("SansSerif", Font.PLAIN, 14);
+       static final Font TABLE_FONT_SELECTED = new Font("SansSerif", 
Font.BOLD, 14);
 
-    private final static long serialVersionUID = 1213748836751014L;
+       private final CyNetworkManager networkManager;
+       private final CyNetworkViewManager networkViewManager;
 
-    public Component getTreeCellRendererComponent(JTree tree, Object value, 
boolean sel, boolean expanded,
-           boolean leaf, int row, boolean hasFocus) {
-       super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, 
row, hasFocus);
+       private final JTreeTable treeTable;
 
-       setFont(NetworkPanel.TABLE_FONT);
-       this.setForeground(NetworkPanel.FONT_COLOR);
-       if (hasView(value)) {
-           setBackgroundNonSelectionColor(NetworkPanel.WITH_VIEW);
-           setBackgroundSelectionColor(NetworkPanel.WITH_VIEW_SELECTED);
-       } else {
-           setBackgroundNonSelectionColor(NetworkPanel.WITHOUT_VIEW);
-           setBackgroundSelectionColor(NetworkPanel.WITHOUT_VIEW_SELECTED);
+       TreeCellRenderer(final JTreeTable treeTable, final CyNetworkManager 
networkManager,
+                       final CyNetworkViewManager networkViewManager) {
+               this.networkManager = networkManager;
+               this.networkViewManager = networkViewManager;
+               this.treeTable = treeTable;
+               
+               final Image iconImage = 
Toolkit.getDefaultToolkit().getImage(getClass().getResource(NETWORK_ICON));
+               final ImageIcon icon = new ImageIcon(iconImage);
+               final Image iconImageLeaf = 
Toolkit.getDefaultToolkit().getImage(getClass().getResource(NETWORK_LEAF_ICON));
+               final ImageIcon iconLeaf = new ImageIcon(iconImageLeaf);
+               
+               this.setClosedIcon(icon);
+               this.setOpenIcon(icon);
+               this.setLeafIcon(iconLeaf);
        }
 
-       return this;
-    }
+       @Override
+       public Component getTreeCellRendererComponent(JTree tree, Object value, 
boolean sel, boolean expanded,
+                       boolean leaf, int row, boolean hasFocus) {
+               super.getTreeCellRendererComponent(tree, value, sel, expanded, 
leaf, row, hasFocus);
 
-    private boolean hasView(final Object value) {
-       final NetworkTreeNode node = (NetworkTreeNode) value;
-       final CyNetwork network = 
this.networkPanel.netmgr.getNetwork(node.getNetworkID());
+               if (value instanceof NetworkTreeNode == false)
+                       return this;
 
-       if (network != null)
-           setToolTipText(network.getCyRow().get(CyTableEntry.NAME, 
String.class));
-       else
-           setToolTipText("Root");
+               final NetworkTreeNode treeNode = (NetworkTreeNode) value;
 
-       return 
this.networkPanel.networkViewManager.viewExists(node.getNetworkID());
-    }
+               this.setForeground(NetworkPanel.FONT_COLOR);
+               treeTable.setForeground(NetworkPanel.FONT_COLOR);
+               this.setBackground(treeTable.getBackground());
+               
this.setBackgroundSelectionColor(treeTable.getSelectionBackground());
+
+               if (selected)
+                       this.setFont(TABLE_FONT_SELECTED);
+               else
+                       this.setFont(TABLE_FONT);
+
+               if(treeNode.getNetworkID() == null) {
+                       setForeground(treeTable.getForeground());
+                       return this;
+               }
+               
+               if (hasView(treeNode))
+                       setForeground(treeTable.getForeground());
+               else
+                       setForeground(Color.red);
+
+               return this;
+       }
+
+       private boolean hasView(final NetworkTreeNode node) {
+               final Long networkID = node.getNetworkID();
+               final CyNetwork network = networkManager.getNetwork(networkID);
+
+               if (network != null)
+                       
setToolTipText(network.getCyRow().get(CyTableEntry.NAME, String.class));
+               else {
+                       if (node.getRoot() == node)
+                               setToolTipText("Network Root");
+               }
+
+               return networkViewManager.viewExists(node.getNetworkID());
+       }
 }
\ No newline at end of file

Copied: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/README.txt 
(from rev 27464, 
core3/impl/trunk/swing-application-impl/src/main/resources/images/user-trash.png-README.txt)
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/resources/images/README.txt    
                            (rev 0)
+++ 
core3/impl/trunk/swing-application-impl/src/main/resources/images/README.txt    
    2011-11-16 02:10:39 UTC (rev 27489)
@@ -0,0 +1,13 @@
+The icon user-trash.png is from the Tango Icon Library
+(http://tango.freedesktop.org/Tango_Icon_Library), which is
+public domain.
+
+<Information about network_32.png icon>
+Icon Pack:Devine-Icons Part-2
+Designer:ipapun
+License:Creative Commons Attribution (by)
+
+<Information about network_l_32.png icon>
+Icon Pack:Blend
+Designer:Laurent Baumann
+License:Creative Commons Attribution Non-commercial Share Alike (by-nc-sa)
\ No newline at end of file

Added: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/network_32.png
===================================================================
(Binary files differ)


Property changes on: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/network_32.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/network_l_32.png
===================================================================
(Binary files differ)


Property changes on: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/network_l_32.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Deleted: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/new/GO.gif
===================================================================
(Binary files differ)

Deleted: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/new/GO2.gif
===================================================================
(Binary files differ)

Deleted: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/new/GOsmall.gif
===================================================================
(Binary files differ)

Deleted: 
core3/impl/trunk/swing-application-impl/src/main/resources/images/user-trash.png-README.txt
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/resources/images/user-trash.png-README.txt
 2011-11-16 01:41:03 UTC (rev 27488)
+++ 
core3/impl/trunk/swing-application-impl/src/main/resources/images/user-trash.png-README.txt
 2011-11-16 02:10:39 UTC (rev 27489)
@@ -1,3 +0,0 @@
-The icon user-trash.png is from the Tango Icon Library
-(http://tango.freedesktop.org/Tango_Icon_Library), which is
-public domain.

-- 
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