JAL-3026 srcjar files for VARNA and log4j
[jalview.git] / srcjar / fr / orsay / lri / varna / applications / fragseq / FragSeqCellRenderer.java
diff --git a/srcjar/fr/orsay/lri/varna/applications/fragseq/FragSeqCellRenderer.java b/srcjar/fr/orsay/lri/varna/applications/fragseq/FragSeqCellRenderer.java
new file mode 100644 (file)
index 0000000..d1e92bf
--- /dev/null
@@ -0,0 +1,225 @@
+package fr.orsay.lri.varna.applications.fragseq;
+
+import java.awt.BasicStroke;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.plaf.basic.BasicTreeUI;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+class FragSeqCellRenderer extends DefaultTreeCellRenderer {  
+          
+       JTree _j;
+       FragSeqTreeModel _m;
+       
+       private static FragSeqCellRenderer _default = new FragSeqCellRenderer(null,null);
+
+       
+
+       public FragSeqCellRenderer (JTree j, FragSeqTreeModel m)
+       {
+               _j = j;
+               _m = m;
+       }
+       
+       public JComponent baseElements(JTree tree,FragSeqTreeModel m,  
+            Object value, boolean sel, boolean expanded, boolean leaf,  
+            int row, boolean hasFocus)
+       {
+               JLabel initValue = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
+        JPanel result = new JPanel();
+        result.setLayout(new BorderLayout());
+        initValue.setBorder(null);
+        result.setBorder(null);
+        result.setBackground(initValue.getBackground());
+        /*if (hasFocus)
+        { 
+               //renderer.setBackground(Color.blue);            
+               //result.setBorder(BorderFactory.createLineBorder(Color.blue));
+            result.setBackground(UIManager.getColor("Tree.selectionBackground"));
+            result.setBorder(BorderFactory.createLineBorder(initValue.getBackground()));
+            initValue.setOpaque(true);
+        }
+        else
+        {
+               result.setBackground(Color.white);
+               result.setBorder(BorderFactory.createLineBorder(initValue.getBackground()));
+            
+        }*/
+        DefaultMutableTreeNode t = (DefaultMutableTreeNode)value;
+        Object o = t.getUserObject();
+        if (( o instanceof String))    
+        {  
+            if (expanded)  
+            {  
+               initValue.setIcon(_default.getOpenIcon());  
+            }  
+            else  
+            {  
+               initValue.setIcon(_default.getClosedIcon());  
+            }  
+            result.add(initValue,BorderLayout.WEST);
+               JButton del = new JButton();
+               del.setIcon(new SimpleIcon(Color.red,26,false));
+               Dimension d = getPreferredSize();
+               d.width=24;
+               del.setPreferredSize(d);
+               del.addActionListener(new FolderCloses((String)o,tree,m));
+            result.add(del,BorderLayout.EAST);
+        }  
+        else  if (( o instanceof FragSeqRNASecStrModel))
+        {  
+               initValue.setIcon(new SimpleIcon(Color.blue.darker()));  
+               result.add(initValue,BorderLayout.WEST);
+        }
+        else  if (( o instanceof FragSeqFileModel))
+        {  
+               initValue.setIcon(_default.getLeafIcon());  
+            FragSeqFileModel mod = (FragSeqFileModel) o;
+            result.add(initValue,BorderLayout.WEST);
+            if (mod.hasChanged())
+            {
+                 JButton refresh = new JButton("Refresh");
+              result.add(refresh,BorderLayout.EAST);
+            }
+        }
+        else  if (( o instanceof FragSeqModel))
+        {
+               FragSeqModel mod = (FragSeqModel) o;
+               initValue.setIcon(new SimpleIcon());  
+            result.add(initValue,BorderLayout.WEST);           
+        }
+        return result;
+       }
+       
+    public Component getDefaultTreeCellRendererComponent(JTree tree,  
+            Object value, boolean sel, boolean expanded, boolean leaf,  
+            int row, boolean hasFocus)  
+    {
+      return super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,hasFocus);
+    }
+
+       public Component getTreeCellRendererComponent(JTree tree,  
+            Object value, boolean sel, boolean expanded, boolean leaf,  
+            int row, boolean hasFocus)  
+    {
+       
+        return baseElements(tree,_m,value,sel,expanded,leaf,row,hasFocus);  
+    }  
+    public Dimension getPreferredSize(int row) {
+        Dimension size = super.getPreferredSize();
+        size.width = _j.getWidth();
+        System.out.println(size);
+        return size;
+    }
+
+
+//    @Override
+//    public void setBounds(final int x, final int y, final int width, final int height) {
+//    super.setBounds(x, y, Math.min(_j.getWidth()-x, width), height);
+//    }
+    
+    
+    public class FolderCloses implements ActionListener{
+       String _path;
+       JComponent _p;
+       FragSeqTreeModel _m;
+       
+       public FolderCloses(String path, JComponent p, FragSeqTreeModel m)
+       {
+               _path = path;
+               _p = p;
+               _m = m;
+       }
+               public void actionPerformed(ActionEvent e) {
+                       if (JOptionPane.showConfirmDialog(_p, "This folder will cease to be watched. Confirm?", "Closing folder", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)
+                       {
+                               _m.removeFolder(_path);
+                               System.out.println(_j);
+                               _j.updateUI();
+                       }
+               }
+                   
+    }
+
+    
+    public class SimpleIcon implements Icon{
+
+        private int _w = 16;
+        private int _h = 16;
+
+        private BasicStroke stroke = new BasicStroke(3);
+        private Color _r;
+        private boolean _drawBackground = true;
+
+        public SimpleIcon()
+        {
+               this(Color.magenta.darker());
+        }
+        public SimpleIcon(Color r)
+        {
+               this(r,16,true);
+        }
+        public SimpleIcon(Color r, int dim, boolean drawBackground)
+        {
+               this(r,dim,dim,drawBackground);
+        }
+
+        public SimpleIcon(Color r, int width, int height,boolean drawBackground)
+        {
+               _r=r;
+               _w=width;
+               _h=height;
+               _drawBackground=drawBackground;
+        }
+
+        public void paintIcon(Component c, Graphics g, int x, int y) {
+            Graphics2D g2d = (Graphics2D) g.create();
+
+            if (_drawBackground)
+            {
+            g2d.setColor(Color.WHITE);
+            g2d.fillRect(x +1 ,y + 1,_w -2 ,_h -2);
+
+            g2d.setColor(Color.BLACK);
+            g2d.drawRect(x +1 ,y + 1,_w -2 ,_h -2);
+            }
+
+            g2d.setColor(_r);
+
+            g2d.setStroke(stroke);
+            g2d.drawLine(x +10, y + 10, x + _w -10, y + _h -10);
+            g2d.drawLine(x +10, y + _h -10, x + _w -10, y + 10);
+
+            g2d.dispose();
+        }
+
+        public int getIconWidth() {
+            return _w;
+        }
+
+        public int getIconHeight() {
+            return _h;
+        }
+    }
+}  
\ No newline at end of file