1 package fr.orsay.lri.varna.applications.fragseq;
3 import java.awt.BasicStroke;
4 import java.awt.BorderLayout;
6 import java.awt.Component;
7 import java.awt.Dimension;
8 import java.awt.Graphics;
9 import java.awt.Graphics2D;
10 import java.awt.event.ActionEvent;
11 import java.awt.event.ActionListener;
14 import javax.swing.BorderFactory;
15 import javax.swing.Icon;
16 import javax.swing.JButton;
17 import javax.swing.JComponent;
18 import javax.swing.JLabel;
19 import javax.swing.JOptionPane;
20 import javax.swing.JPanel;
21 import javax.swing.JScrollPane;
22 import javax.swing.JTree;
23 import javax.swing.UIManager;
24 import javax.swing.border.Border;
25 import javax.swing.plaf.basic.BasicTreeUI;
26 import javax.swing.tree.DefaultMutableTreeNode;
27 import javax.swing.tree.DefaultTreeCellRenderer;
29 class FragSeqCellRenderer extends DefaultTreeCellRenderer {
34 private static FragSeqCellRenderer _default = new FragSeqCellRenderer(null,null);
38 public FragSeqCellRenderer (JTree j, FragSeqTreeModel m)
44 public JComponent baseElements(JTree tree,FragSeqTreeModel m,
45 Object value, boolean sel, boolean expanded, boolean leaf,
46 int row, boolean hasFocus)
48 JLabel initValue = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
49 JPanel result = new JPanel();
50 result.setLayout(new BorderLayout());
51 initValue.setBorder(null);
52 result.setBorder(null);
53 result.setBackground(initValue.getBackground());
56 //renderer.setBackground(Color.blue);
57 //result.setBorder(BorderFactory.createLineBorder(Color.blue));
58 result.setBackground(UIManager.getColor("Tree.selectionBackground"));
59 result.setBorder(BorderFactory.createLineBorder(initValue.getBackground()));
60 initValue.setOpaque(true);
64 result.setBackground(Color.white);
65 result.setBorder(BorderFactory.createLineBorder(initValue.getBackground()));
68 DefaultMutableTreeNode t = (DefaultMutableTreeNode)value;
69 Object o = t.getUserObject();
70 if (( o instanceof String))
74 initValue.setIcon(_default.getOpenIcon());
78 initValue.setIcon(_default.getClosedIcon());
80 result.add(initValue,BorderLayout.WEST);
81 JButton del = new JButton();
82 del.setIcon(new SimpleIcon(Color.red,26,false));
83 Dimension d = getPreferredSize();
85 del.setPreferredSize(d);
86 del.addActionListener(new FolderCloses((String)o,tree,m));
87 result.add(del,BorderLayout.EAST);
89 else if (( o instanceof FragSeqRNASecStrModel))
91 initValue.setIcon(new SimpleIcon(Color.blue.darker()));
92 result.add(initValue,BorderLayout.WEST);
94 else if (( o instanceof FragSeqFileModel))
96 initValue.setIcon(_default.getLeafIcon());
97 FragSeqFileModel mod = (FragSeqFileModel) o;
98 result.add(initValue,BorderLayout.WEST);
101 JButton refresh = new JButton("Refresh");
102 result.add(refresh,BorderLayout.EAST);
105 else if (( o instanceof FragSeqModel))
107 FragSeqModel mod = (FragSeqModel) o;
108 initValue.setIcon(new SimpleIcon());
109 result.add(initValue,BorderLayout.WEST);
114 public Component getDefaultTreeCellRendererComponent(JTree tree,
115 Object value, boolean sel, boolean expanded, boolean leaf,
116 int row, boolean hasFocus)
118 return super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,hasFocus);
121 public Component getTreeCellRendererComponent(JTree tree,
122 Object value, boolean sel, boolean expanded, boolean leaf,
123 int row, boolean hasFocus)
126 return baseElements(tree,_m,value,sel,expanded,leaf,row,hasFocus);
128 public Dimension getPreferredSize(int row) {
129 Dimension size = super.getPreferredSize();
130 size.width = _j.getWidth();
131 System.out.println(size);
137 // public void setBounds(final int x, final int y, final int width, final int height) {
138 // super.setBounds(x, y, Math.min(_j.getWidth()-x, width), height);
142 public class FolderCloses implements ActionListener{
147 public FolderCloses(String path, JComponent p, FragSeqTreeModel m)
153 public void actionPerformed(ActionEvent e) {
154 if (JOptionPane.showConfirmDialog(_p, "This folder will cease to be watched. Confirm?", "Closing folder", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)
156 _m.removeFolder(_path);
157 System.out.println(_j);
165 public class SimpleIcon implements Icon{
170 private BasicStroke stroke = new BasicStroke(3);
172 private boolean _drawBackground = true;
176 this(Color.magenta.darker());
179 public SimpleIcon(Color r)
183 public SimpleIcon(Color r, int dim, boolean drawBackground)
185 this(r,dim,dim,drawBackground);
188 public SimpleIcon(Color r, int width, int height,boolean drawBackground)
193 _drawBackground=drawBackground;
196 public void paintIcon(Component c, Graphics g, int x, int y) {
197 Graphics2D g2d = (Graphics2D) g.create();
201 g2d.setColor(Color.WHITE);
202 g2d.fillRect(x +1 ,y + 1,_w -2 ,_h -2);
204 g2d.setColor(Color.BLACK);
205 g2d.drawRect(x +1 ,y + 1,_w -2 ,_h -2);
210 g2d.setStroke(stroke);
211 g2d.drawLine(x +10, y + 10, x + _w -10, y + _h -10);
212 g2d.drawLine(x +10, y + _h -10, x + _w -10, y + 10);
217 public int getIconWidth() {
221 public int getIconHeight() {