boolean mouseDragging = false;
boolean MAC = false;
-
- //for editing cursor
+
+ // for editing cursor
int cursorX = 0;
+
int cursorY = 0;
/**
*/
public int adjustPanelHeight()
{
- int height=calcPanelHeight();
+ int height = calcPanelHeight();
this.setPreferredSize(new Dimension(1, height));
if (ap != null)
{
}
/**
- * calculate the height for visible annotation, revalidating bounds where necessary
- * ABSTRACT GUI METHOD
+ * calculate the height for visible annotation, revalidating bounds where
+ * necessary ABSTRACT GUI METHOD
+ *
* @return total height of annotation
*/
public int calcPanelHeight()
/*
* Just display the needed structure options
*/
- if(av.alignment.isNucleotide()==true){
- item = new JMenuItem(STEM);
- item.addActionListener(this);
- pop.add(item);
- }else{
- item = new JMenuItem(HELIX);
- item.addActionListener(this);
- pop.add(item);
- item = new JMenuItem(SHEET);
- item.addActionListener(this);
- pop.add(item);
+ if (av.alignment.isNucleotide() == true)
+ {
+ item = new JMenuItem(STEM);
+ item.addActionListener(this);
+ pop.add(item);
+ }
+ else
+ {
+ item = new JMenuItem(HELIX);
+ item.addActionListener(this);
+ pop.add(item);
+ item = new JMenuItem(SHEET);
+ item.addActionListener(this);
+ pop.add(item);
}
item = new JMenuItem(LABEL);
item.addActionListener(this);
*/
public void mouseClicked(MouseEvent evt)
{
- if(activeRow !=-1){
- AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
- AlignmentAnnotation anot = aa[activeRow];
-
- if(anot.description.equals("secondary structure")){
- //System.out.println(anot.description+" "+anot.getRNAStruc());
- }
- }
+ if (activeRow != -1)
+ {
+ AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
+ AlignmentAnnotation anot = aa[activeRow];
+
+ if (anot.description.equals("secondary structure"))
+ {
+ // System.out.println(anot.description+" "+anot.getRNAStruc());
+ }
+ }
}
- //TODO mouseClicked-content and drawCursor are quite experimental!
- public void drawCursor(Graphics graphics, SequenceI seq, int res, int x1, int y1)
- {
- int pady = av.charHeight / 5;
- int charOffset = 0;
- graphics.setColor(Color.black);
- graphics.fillRect(x1, y1, av.charWidth, av.charHeight);
- if (av.validCharWidth)
- {
- graphics.setColor(Color.white);
+ // TODO mouseClicked-content and drawCursor are quite experimental!
+ public void drawCursor(Graphics graphics, SequenceI seq, int res, int x1,
+ int y1)
+ {
+ int pady = av.charHeight / 5;
+ int charOffset = 0;
+ graphics.setColor(Color.black);
+ graphics.fillRect(x1, y1, av.charWidth, av.charHeight);
- char s = seq.getCharAt(res);
+ if (av.validCharWidth)
+ {
+ graphics.setColor(Color.white);
- charOffset = (av.charWidth - fm.charWidth(s)) / 2;
- graphics.drawString(String.valueOf(s), charOffset + x1,
- (y1 + av.charHeight) - pady);
- }
+ char s = seq.getCharAt(res);
- }
+ charOffset = (av.charWidth - fm.charWidth(s)) / 2;
+ graphics.drawString(String.valueOf(s), charOffset + x1,
+ (y1 + av.charHeight) - pady);
+ }
+
+ }
/**
* DOCUMENT ME!
boolean[] graphGroupDrawn = new boolean[aa.length];
int charOffset = 0; // offset for a label
float fmWidth, fmScaling = 1f; // scaling for a label to fit it into a
- // column.
+ // column.
Font ofont = g.getFont();
// \u03B2 \u03B1
for (int i = 0; i < aa.length; i++)
}
if (row.hasIcons)
{
- char ss=row.annotations[column].secondaryStructure;
- if (ss=='S')
+ char ss = row.annotations[column].secondaryStructure;
+ if (ss == 'S')
{
// distinguish between forward/backward base-pairing
- if (row.annotations[column].displayCharacter.indexOf(')')>-1)
+ if (row.annotations[column].displayCharacter.indexOf(')') > -1)
{
- ss='s';
+ ss = 's';
}
}
- if (!validRes
- || (ss != lastSS))
+ if (!validRes || (ss != lastSS))
{
if (x > -1)
{
int x1 = lastSSX;
int x2 = (x * av.charWidth);
Regex closeparen = new Regex("(\\))");
-
- String dc = column==0 ? "" : row.annotations[column - 1].displayCharacter;
-
- boolean diffupstream=sCol == 0 || row.annotations[sCol - 1] == null
+
+ String dc = column == 0 ? ""
+ : row.annotations[column - 1].displayCharacter;
+
+ boolean diffupstream = sCol == 0 || row.annotations[sCol - 1] == null
|| !dc.equals(row.annotations[sCol - 1].displayCharacter);
- boolean diffdownstream=!validRes || !validEnd || row.annotations[column] == null
+ boolean diffdownstream = !validRes || !validEnd
+ || row.annotations[column] == null
|| !dc.equals(row.annotations[column].displayCharacter);
- //System.out.println("Column "+column+" diff up: "+diffupstream+" down:"+diffdownstream);
+ // System.out.println("Column "+column+" diff up: "+diffupstream+" down:"+diffdownstream);
// If a closing base pair half of the stem, display a backward arrow
- if (column > 0
- && closeparen
- .search(dc))
+ if (column > 0 && closeparen.search(dc))
{
if (diffupstream)
// if (validRes && column>1 && row.annotations[column-2]!=null &&
}
if (diffdownstream)
{
- x2-=1;
+ x2 -= 1;
}
}
else
}
if (diffupstream)
{
- x1+=1;
+ x1 += 1;
}
}
// draw arrow body
int column, boolean validRes, boolean validEnd)
{
g.setColor(Color.gray);
- g.fillRect(lastSSX, y + 6 + iconOffset, (x * av.charWidth) - lastSSX, 2);
+ g
+ .fillRect(lastSSX, y + 6 + iconOffset, (x * av.charWidth)
+ - lastSSX, 2);
}
private void drawSheetAnnot(Graphics g, AlignmentAnnotation row,
if (MAC)
{
- int ofs=av.charWidth/2;
+ int ofs = av.charWidth / 2;
// Off by 1 offset when drawing rects and ovals
// to offscreen image on the MAC
- g.fillRoundRect(lastSSX, y + 4 + iconOffset, x2-x1, 8, 8, 8);
+ g.fillRoundRect(lastSSX, y + 4 + iconOffset, x2 - x1, 8, 8, 8);
if (sCol == 0 || row.annotations[sCol - 1] == null
|| row.annotations[sCol - 1].secondaryStructure != 'H')
{
- } else {
-// g.setColor(Color.orange);
- g.fillRoundRect(lastSSX, y + 4 + iconOffset, x2-x1-ofs+1, 8, 0, 0);
}
- if (!validRes || row.annotations[column] == null
+ else
+ {
+ // g.setColor(Color.orange);
+ g.fillRoundRect(lastSSX, y + 4 + iconOffset, x2 - x1 - ofs + 1, 8,
+ 0, 0);
+ }
+ if (!validRes || row.annotations[column] == null
|| row.annotations[column].secondaryStructure != 'H')
{
-
- } else {
-// g.setColor(Color.magenta);
- g.fillRoundRect(lastSSX+ofs, y + 4 + iconOffset, x2-x1-ofs+1, 8, 0, 0);
-
+
+ }
+ else
+ {
+ // g.setColor(Color.magenta);
+ g.fillRoundRect(lastSSX + ofs, y + 4 + iconOffset, x2 - x1 - ofs
+ + 1, 8, 0, 0);
+
}
-
+
return;
}
x1 += av.charWidth / 2;
}
- if (!validRes || row.annotations[column] == null
+ if (!validRes || row.annotations[column] == null
|| row.annotations[column].secondaryStructure != 'H')
{
g.fillArc((x * av.charWidth) - av.charWidth, y + 4 + iconOffset,
g.fillRect(x1, y + 4 + iconOffset, x2 - x1, 8);
}
-public void drawLineGraph(Graphics g, AlignmentAnnotation aa, int sRes,
+ public void drawLineGraph(Graphics g, AlignmentAnnotation aa, int sRes,
int eRes, int y, float min, float max, int graphHeight)
{
if (sRes > aa.annotations.length)
// draw profile if available
if (renderProfile && aa.annotations[column].value != 0)
{
+
int profl[] = getProfileFor(aa, column);
- /*if(profl != null){
- for(int i=0; i<profl.length;i++){
- System.out.print(profl[i]+",");
- }
- System.out.print("drawProfile\n");
- }*/
- int ht = y1, htn = y2 - y1;// aa.graphHeight;
- float wdth;
- double ht2 = 0;
- char[] dc = new char[1];
- LineMetrics lm;
- for (int c = 1; profl != null && c < profl[0];)
+ // just try to draw the logo if profl is not null
+ if (profl != null)
{
- dc[0] = (char) profl[c++];
- wdth = av.charWidth;
- wdth /= (float) fm.charsWidth(dc, 0, 1);
- if (c > 2)
+ /*
+ * if (profl != null) {
+ *
+ * for (int i = 0; i < profl.length; i++) { System.out.print(profl[i]
+ * + ","); }
+ *
+ * }
+ */
+ int ht = y1, htn = y2 - y1;// aa.graphHeight;
+ float wdth;
+ double ht2 = 0;
+ char[] dc;
+
+ /**
+ * profl.length == 11 indicates that the profile of a secondary
+ * structure conservation row was accesed.
+ * Therefore dc gets length 2, to have space for a basepair instead of
+ * just a single nucleotide
+ */
+ if (profl.length == 22)
{
- ht += (int) ht2;
+ dc = new char[2];
}
+ else
{
- // if (aa.annotations[column].value==0) {
- // g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(wdth,
- // (ht2=(aa.graphHeight*0.1/av.charHeight)))));
- // ht = y2-(int)ht2;
- // } else {
- g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(
- wdth, (ht2 = (htn * ((double) profl[c++]) / 100.0))
- / av.charHeight)));
- lm = g.getFontMetrics().getLineMetrics(dc, 0, 1, g);
- // htn -=ht2;
- // }
- g.setColor(profcolour.findColour(dc[0])); // (av.globalColourScheme!=null)
- // ? );// try to get a
- // colourscheme for the
- // group(aa.groupRef.cs==null)
- // ? av.textColour2 :
- // cs.findColour(dc));
- //System.out.println(dc[0]);
- g.drawChars(dc, 0, 1, x * av.charWidth,
- (int) (ht + lm.getHeight()));
- // ht+=g.getFontMetrics().getAscent()-g.getFontMetrics().getDescent();
+ dc = new char[1];
+ }
+
+ LineMetrics lm;
+ for (int c = 1; profl != null && c < profl[0];)
+ {
+ dc[0] = (char) profl[c++];
+
+ if (aa.label.startsWith("StrucConsensus"))
+ {
+ dc[1] = 'A';
+ }
+
+ wdth = av.charWidth;
+ wdth /= (float) fm.charsWidth(dc, 0, dc.length);
+
+ if (c > 2)
+ {
+ ht += (int) ht2;
+ }
+ {
+ // if (aa.annotations[column].value==0) {
+ // g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(wdth,
+ // (ht2=(aa.graphHeight*0.1/av.charHeight)))));
+ // ht = y2-(int)ht2;
+ // } else {
+ g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(
+ wdth, (ht2 = (htn * ((double) profl[c++]) / 100.0))
+ / av.charHeight)));
+ lm = g.getFontMetrics().getLineMetrics(dc, 0, 1, g);
+ // htn -=ht2;
+ // }
+ g.setColor(profcolour.findColour(dc[0])); // (av.globalColourScheme!=null)
+ // ? );// try to get a
+ // colourscheme for the
+ // group(aa.groupRef.cs==null)
+ // ? av.textColour2 :
+ // cs.findColour(dc));
+ // System.out.println(dc[0]);
+
+ g.drawChars(dc, 0, dc.length, x * av.charWidth,
+ (int) (ht + lm.getHeight()));
+
+ // ht+=g.getFontMetrics().getAscent()-g.getFontMetrics().getDescent();
+ }
}
+ g.setFont(ofont);
}
- g.setFont(ofont);
}
x++;
}
&& aa.groupRef.isShowSequenceLogo())
{
return AAFrequency.extractProfile(
- aa.groupRef.consensusData[column],
- aa.groupRef.getIgnoreGapsConsensus());
+ aa.groupRef.consensusData[column], aa.groupRef
+ .getIgnoreGapsConsensus());
}
// TODO extend annotation row to enable dynamic and static profile data to
// be stored
if (aa.groupRef == null && aa.sequenceRef == null
&& av.isShowSequenceLogo())
{
- return AAFrequency.extractProfile(av.hconsensus[column],
- av.getIgnoreGapsConsensus());
+ return AAFrequency.extractProfile(av.hconsensus[column], av
+ .getIgnoreGapsConsensus());
}
- }else{
- if (aa.autoCalculated && aa.label.startsWith("StrucConsensus")){
- if (aa.groupRef != null && aa.groupRef.consensusData != null
- && aa.groupRef.isShowSequenceLogo())
- {
- return StructureFrequency.extractProfile(
- aa.groupRef.consensusData[column],
- aa.groupRef.getIgnoreGapsConsensus());
- }
- // TODO extend annotation row to enable dynamic and static profile data to
- // be stored
- if (aa.groupRef == null && aa.sequenceRef == null
- && av.isShowSequenceLogo())
- {
- return StructureFrequency.extractProfile(av.hconsensus[column],
- av.getIgnoreGapsConsensus());
- }
+ }
+ else
+ {
+ if (aa.autoCalculated && aa.label.startsWith("StrucConsensus"))
+ {
+ if (aa.groupRef != null && aa.groupRef.consensusData != null
+ && aa.groupRef.isShowSequenceLogo())
+ {
+ //TODO check what happens for group selections
+ return StructureFrequency.extractProfile(
+ aa.groupRef.consensusData[column], aa.groupRef
+ .getIgnoreGapsConsensus(),column);
}
+ // TODO extend annotation row to enable dynamic and static profile data
+ // to
+ // be stored
+ if (aa.groupRef == null && aa.sequenceRef == null
+ && av.isShowSequenceLogo())
+ {
+ return StructureFrequency.extractProfile(av.hStrucConsensus[column],
+ av.getIgnoreGapsConsensus(),column);
+ }
+ }
}
return null;