X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src2%2Ffr%2Forsay%2Flri%2Fvarna%2Fapplications%2Ffragseq%2FFragSeqCellRenderer.java;fp=src2%2Ffr%2Forsay%2Flri%2Fvarna%2Fapplications%2Ffragseq%2FFragSeqCellRenderer.java;h=d1e92bfec4c35262be7ea483b658ae9bbae07e42;hb=665d2c2f4c1310e6985b93b7c2c8a8eec2fa9086;hp=0000000000000000000000000000000000000000;hpb=0e684f72690bd6532272a39ab6c188a27559fd09;p=jalview.git diff --git a/src2/fr/orsay/lri/varna/applications/fragseq/FragSeqCellRenderer.java b/src2/fr/orsay/lri/varna/applications/fragseq/FragSeqCellRenderer.java new file mode 100644 index 0000000..d1e92bf --- /dev/null +++ b/src2/fr/orsay/lri/varna/applications/fragseq/FragSeqCellRenderer.java @@ -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