allows for null Jmol viewer
[jalview.git] / src2 / fr / orsay / lri / varna / applications / fragseq / FragSeqCellRenderer.java
1 package fr.orsay.lri.varna.applications.fragseq;
2
3 import java.awt.BasicStroke;
4 import java.awt.BorderLayout;
5 import java.awt.Color;
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;
12 import java.io.File;
13
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;
28
29 class FragSeqCellRenderer extends DefaultTreeCellRenderer {  
30            
31         JTree _j;
32         FragSeqTreeModel _m;
33         
34         private static FragSeqCellRenderer _default = new FragSeqCellRenderer(null,null);
35
36         
37
38         public FragSeqCellRenderer (JTree j, FragSeqTreeModel m)
39         {
40                 _j = j;
41                 _m = m;
42         }
43         
44         public JComponent baseElements(JTree tree,FragSeqTreeModel m,  
45             Object value, boolean sel, boolean expanded, boolean leaf,  
46             int row, boolean hasFocus)
47         {
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());
54         /*if (hasFocus)
55         { 
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);
61         }
62         else
63         {
64                 result.setBackground(Color.white);
65                 result.setBorder(BorderFactory.createLineBorder(initValue.getBackground()));
66             
67         }*/
68         DefaultMutableTreeNode t = (DefaultMutableTreeNode)value;
69         Object o = t.getUserObject();
70         if (( o instanceof String))    
71         {  
72             if (expanded)  
73             {  
74                 initValue.setIcon(_default.getOpenIcon());  
75             }  
76             else  
77             {  
78                 initValue.setIcon(_default.getClosedIcon());  
79             }  
80             result.add(initValue,BorderLayout.WEST);
81                 JButton del = new JButton();
82                 del.setIcon(new SimpleIcon(Color.red,26,false));
83                 Dimension d = getPreferredSize();
84                 d.width=24;
85                 del.setPreferredSize(d);
86                 del.addActionListener(new FolderCloses((String)o,tree,m));
87             result.add(del,BorderLayout.EAST);
88         }  
89         else  if (( o instanceof FragSeqRNASecStrModel))
90         {  
91                 initValue.setIcon(new SimpleIcon(Color.blue.darker()));  
92                 result.add(initValue,BorderLayout.WEST);
93         }
94         else  if (( o instanceof FragSeqFileModel))
95         {  
96                 initValue.setIcon(_default.getLeafIcon());  
97             FragSeqFileModel mod = (FragSeqFileModel) o;
98             result.add(initValue,BorderLayout.WEST);
99             if (mod.hasChanged())
100             {
101                   JButton refresh = new JButton("Refresh");
102               result.add(refresh,BorderLayout.EAST);
103             }
104         }
105         else  if (( o instanceof FragSeqModel))
106         {
107                 FragSeqModel mod = (FragSeqModel) o;
108                 initValue.setIcon(new SimpleIcon());  
109             result.add(initValue,BorderLayout.WEST);            
110         }
111         return result;
112         }
113         
114     public Component getDefaultTreeCellRendererComponent(JTree tree,  
115             Object value, boolean sel, boolean expanded, boolean leaf,  
116             int row, boolean hasFocus)  
117     {
118       return super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,hasFocus);
119     }
120
121         public Component getTreeCellRendererComponent(JTree tree,  
122             Object value, boolean sel, boolean expanded, boolean leaf,  
123             int row, boolean hasFocus)  
124     {
125         
126         return baseElements(tree,_m,value,sel,expanded,leaf,row,hasFocus);  
127     }  
128     public Dimension getPreferredSize(int row) {
129         Dimension size = super.getPreferredSize();
130         size.width = _j.getWidth();
131         System.out.println(size);
132         return size;
133     }
134
135
136 //    @Override
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);
139 //    }
140     
141     
142     public class FolderCloses implements ActionListener{
143         String _path;
144         JComponent _p;
145         FragSeqTreeModel _m;
146         
147         public FolderCloses(String path, JComponent p, FragSeqTreeModel m)
148         {
149                 _path = path;
150                 _p = p;
151                 _m = m;
152         }
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)
155                         {
156                                 _m.removeFolder(_path);
157                                 System.out.println(_j);
158                                 _j.updateUI();
159                         }
160                 }
161                     
162     }
163
164     
165     public class SimpleIcon implements Icon{
166
167         private int _w = 16;
168         private int _h = 16;
169
170         private BasicStroke stroke = new BasicStroke(3);
171         private Color _r;
172         private boolean _drawBackground = true;
173
174         public SimpleIcon()
175         {
176                 this(Color.magenta.darker());
177         }
178  
179         public SimpleIcon(Color r)
180         {
181                 this(r,16,true);
182         }
183         public SimpleIcon(Color r, int dim, boolean drawBackground)
184         {
185                 this(r,dim,dim,drawBackground);
186         }
187
188         public SimpleIcon(Color r, int width, int height,boolean drawBackground)
189         {
190                 _r=r;
191                 _w=width;
192                 _h=height;
193                 _drawBackground=drawBackground;
194         }
195
196         public void paintIcon(Component c, Graphics g, int x, int y) {
197             Graphics2D g2d = (Graphics2D) g.create();
198
199             if (_drawBackground)
200             {
201             g2d.setColor(Color.WHITE);
202             g2d.fillRect(x +1 ,y + 1,_w -2 ,_h -2);
203
204             g2d.setColor(Color.BLACK);
205             g2d.drawRect(x +1 ,y + 1,_w -2 ,_h -2);
206             }
207
208             g2d.setColor(_r);
209
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);
213
214             g2d.dispose();
215         }
216
217         public int getIconWidth() {
218             return _w;
219         }
220
221         public int getIconHeight() {
222             return _h;
223         }
224     }
225 }