Allowed for addition of OverviewPanel
[jalview.git] / src / jalview / gui / AlignmentPanel.java
1 package jalview.gui;\r
2 \r
3 import jalview.jbgui.GAlignmentPanel;\r
4 import java.awt.*;\r
5 import java.awt.event.*;\r
6 import java.io.*;\r
7 \r
8 public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListener\r
9 {\r
10 \r
11   AlignViewport     av;\r
12   OverviewPanel overviewPanel;\r
13   public SeqPanel   seqPanel;\r
14   public IdPanel    idPanel;\r
15   public AlignFrame alignFrame;\r
16   public ScalePanel scalePanel;\r
17   public ScorePanel scorePanel;\r
18 \r
19   public boolean    groupEdit = false;\r
20 \r
21   public AlignmentPanel(AlignFrame af, AlignViewport av)\r
22   {\r
23     alignFrame = af;\r
24     this.av         = av;\r
25     seqPanel        = new SeqPanel  (av, this);\r
26     idPanel         = new IdPanel   (av, this);\r
27     scalePanel = new ScalePanel(av);\r
28     scorePanel = new ScorePanel(av);\r
29 \r
30 \r
31     idPanelHolder.add(idPanel, BorderLayout.CENTER);\r
32     idPanel.addNotify();\r
33     scalePanelHolder.add(scalePanel, BorderLayout.CENTER);\r
34     scorePanelHolder.add(scorePanel, BorderLayout.CENTER);\r
35     seqPanelHolder.add(seqPanel, BorderLayout.CENTER);\r
36     setScrollValues(0,0);\r
37 \r
38     hscroll.addAdjustmentListener(this);\r
39     vscroll.addAdjustmentListener(this);\r
40     selectAll(false);\r
41 \r
42     addComponentListener(new ComponentAdapter()\r
43    {\r
44        public void componentResized(ComponentEvent evt)\r
45      {\r
46      //  if(!initialising)\r
47      RefreshPanels();\r
48      }\r
49    });\r
50 \r
51   }\r
52 \r
53   public int countSelected()\r
54   {\r
55     return av.getSelection().size();\r
56   }\r
57 \r
58   public void selectAll(boolean flag) {\r
59     int i = 0;\r
60     if (flag) {\r
61       while (i < seqPanel.align.getHeight()) {\r
62         if (! av.getSelection().contains(av.getAlignment().getSequenceAt(i))) {\r
63           av.getSelection().addElement(av.getAlignment().getSequenceAt(i));\r
64         }\r
65         i++;\r
66       }\r
67     } else {\r
68       av.getSelection().clear();\r
69     }\r
70   }\r
71 \r
72  public OverviewPanel getOverviewPanel()\r
73  {\r
74    return overviewPanel;\r
75  }\r
76 \r
77  public void setOverviewPanel(OverviewPanel op)\r
78  {\r
79    overviewPanel = op;\r
80  }\r
81 \r
82 \r
83   public void setGraphPanelVisible(boolean b)\r
84   {\r
85     scorePanelHolder.setVisible(b);\r
86     idSpaceFillerPanel.setVisible(b);\r
87     RefreshPanels();\r
88   }\r
89 \r
90   public void setColourScheme(jalview.schemes.ColourSchemeI cs)\r
91   {\r
92     seqPanel.setColourScheme(cs);\r
93     if(overviewPanel!=null)\r
94       overviewPanel.updateOverviewImage();\r
95   }\r
96 \r
97 \r
98   public void RefreshPanels()\r
99   {\r
100 \r
101   /*  try{\r
102       ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("dump.dat"));\r
103       out.writeObject( (jalview.datamodel.Alignment)av.getAlignment() );\r
104     }catch(IOException ex){ex.printStackTrace();}*/\r
105 \r
106     invalidate();\r
107     validate();\r
108     idPanel.idCanvas.paintFlag = true;\r
109     idPanelHolder.setPreferredSize( idPanel.idCanvas.getPreferredSize() );\r
110     seqPanel.seqCanvas.paintFlag = true;\r
111     setScrollValues(av.getStartRes(), av.getStartSeq());\r
112     av.getConsensus(true);\r
113     repaint();\r
114 \r
115     if(overviewPanel!=null)\r
116       overviewPanel.updateOverviewImage();\r
117 \r
118   }\r
119 \r
120   int hextent = 0;\r
121   int vextent = 0;\r
122 \r
123   public void setScrollValues(int x, int y)\r
124   {\r
125     hextent = (int)(seqPanel.seqCanvas.getWidth()/av.getCharWidth());\r
126     vextent = seqPanel.seqCanvas.getHeight()/av.getCharHeight();\r
127 \r
128     if(hextent+x  >  av.getAlignment().getWidth())\r
129       x =  av.getAlignment().getWidth()- hextent;\r
130 \r
131     if(vextent+y > av.getAlignment().getHeight())\r
132       y = av.getAlignment().getHeight() - vextent;\r
133 \r
134     if(y<0)\r
135       y = 0;\r
136 \r
137     if(x<0)\r
138       x=0;\r
139 \r
140     hscroll.setValues(x,hextent,0,av.getAlignment().getWidth());\r
141     vscroll.setValues(y,vextent,0,av.getAlignment().getHeight() );\r
142     seqPanel.seqCanvas.paintFlag = true;\r
143     repaint();\r
144 \r
145   }\r
146 \r
147 \r
148   public void adjustmentValueChanged(AdjustmentEvent evt)\r
149   {\r
150 \r
151     if (evt.getSource() == hscroll)\r
152     {\r
153       int x = hscroll.getValue();\r
154       av.setStartRes(x);\r
155       av.setEndRes(x + (int)(seqPanel.seqCanvas.getWidth()/av.getCharWidth()-1));\r
156     }\r
157 \r
158     if (evt.getSource() == vscroll)\r
159     {\r
160         int offy = vscroll.getValue();\r
161         av.setStartSeq(offy);\r
162         av.setEndSeq(offy + seqPanel.seqCanvas.getHeight()/av.getCharHeight());\r
163     }\r
164 \r
165 \r
166     if(overviewPanel!=null)\r
167       overviewPanel.setBoxPosition();\r
168 \r
169 \r
170     repaint();\r
171   }\r
172 \r
173 \r
174 \r
175 }\r