3 import javax.swing.JPanel;
\r
4 import java.awt.event.*;
\r
7 import javax.swing.*;
\r
8 import jalview.datamodel.*;
\r
10 public class SecondaryStructurePanel extends JPanel implements ActionListener
\r
15 SecondaryStructure amend;
\r
17 public SecondaryStructurePanel(AlignViewport av)
\r
20 structures = new Vector();
\r
21 setPreferredSize(new Dimension(500,30));
\r
23 addMouseListener(new MouseAdapter()
\r
25 public void mousePressed(MouseEvent evt)
\r
26 { doMousePressed(evt); }
\r
27 public void mouseReleased(MouseEvent evt)
\r
28 { doMouseReleased(evt); }
\r
30 addMouseMotionListener(new MouseMotionAdapter()
\r
32 public void mouseDragged(MouseEvent evt)
\r
33 { doMouseDragged(evt); }
\r
39 boolean amendStart = false;
\r
40 boolean amendEnd = false;
\r
42 public void doMousePressed(MouseEvent evt)
\r
48 startRes = evt.getX() / av.getCharWidth() + av.getStartRes();
\r
49 for(int i=0; i<structures.size(); i++)
\r
51 SecondaryStructure ss = (SecondaryStructure) structures.get(i);
\r
52 if(startRes>=ss.start && startRes<=ss.end)
\r
55 if(startRes==ss.start)
\r
58 if(startRes==ss.end)
\r
61 if(evt.getClickCount()==2)
\r
63 String label = JOptionPane.showInputDialog(this, "Amend label", "Amend label", JOptionPane.QUESTION_MESSAGE );
\r
75 public void doMouseReleased(MouseEvent evt)
\r
77 endRes = evt.getX() / av.getCharWidth() + av.getStartRes();
\r
82 amend.start = endRes;
\r
91 endRes = evt.getX() / av.getCharWidth() + av.getStartRes();
\r
93 JPopupMenu pop = new JPopupMenu("Structure type");
\r
94 JMenuItem item = new JMenuItem("Helix");
\r
95 item.addActionListener(this);
\r
97 item = new JMenuItem("Sheet");
\r
98 item.addActionListener(this);
\r
100 pop.show(this, evt.getX(), evt.getY());
\r
104 public void actionPerformed(ActionEvent evt)
\r
108 if(evt.getActionCommand().equals("Helix"))
\r
109 type = SecondaryStructure.HELIX;
\r
110 else if(evt.getActionCommand().equals("Sheet"))
\r
111 type = SecondaryStructure.SHEET;
\r
113 String label = JOptionPane.showInputDialog(this, "Enter a label for the structure?", "Enter label", JOptionPane.QUESTION_MESSAGE );
\r
117 SecondaryStructure ss = new SecondaryStructure(startRes, endRes, type, label);
\r
118 structures.add(ss);
\r
123 public void doMouseDragged(MouseEvent evt)
\r
125 paintNow(getGraphics());
\r
128 void paintNow(Graphics g)
\r
130 g.setColor(Color.white);
\r
131 g.setFont(new Font("Verdana", Font.PLAIN, 10));
\r
132 g.fillRect(0,0,getWidth(),getHeight());
\r
133 for(int i=0; i<structures.size(); i++)
\r
135 SecondaryStructure ss = (SecondaryStructure)structures.get(i);
\r
138 if(ss.type==SecondaryStructure.SHEET)
\r
140 g.setColor(Color.orange);
\r
142 g.setColor(Color.red);
\r
144 g.fillRect( ( ss.start - av.startRes) * av.charWidth, 4,
\r
145 (ss.end - ss.start) * av.charWidth, 7);
\r
147 g.fillPolygon( new int[]{ (ss.end - av.startRes )* av.charWidth,
\r
148 ( ss.end - av.startRes )* av.charWidth,
\r
149 ( ss.end - av.startRes )* av.charWidth+7},
\r
150 new int[]{0,14,7}, 3);
\r
153 if(ss.type==SecondaryStructure.HELIX)
\r
155 g.setColor(Color.magenta);
\r
157 g.setColor(Color.red);
\r
158 g.fillRoundRect((ss.start -av.startRes)* av.charWidth, 4,
\r
159 (ss.end - ss.start) * av.charWidth, 7, 8,8);
\r
164 g.setColor(Color.black);
\r
166 int labelWidth = g.getFontMetrics().stringWidth(ss.label);
\r
168 g.drawString( ss.label, (ss.start +(ss.end-ss.start)/2 -av.startRes)*av.charWidth - labelWidth/2, 24);
\r
172 public void paintComponent(Graphics g)
\r
178 class SecondaryStructure
\r
180 public static int HELIX = 1;
\r
181 public static int SHEET = 2;
\r
182 public String label="";
\r
183 public int start= 20;
\r
184 public int end = 40;
\r
185 public int type = HELIX;
\r
187 public SecondaryStructure(int s, int e, int t, String l)
\r
189 start = s; end = e; type = t; label = l;
\r