+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