/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
+ * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This file is part of Jalview.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
*/
package jalview.appletgui;
Tooltip tooltip;
+ private boolean hasHiddenRows;
+
public AnnotationLabels(AlignmentPanel ap)
{
this.ap = ap;
repaint();
}
+ /**
+ *
+ * @param y
+ * @return -2 if no rows are visible at all, -1 if no visible rows were
+ * selected
+ */
int getSelectedRow(int y)
{
- int row = -1;
+ int row = -2;
AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
if (aa == null)
{
return row;
}
-
int height = 0;
for (int i = 0; i < aa.length; i++)
{
+ row = -1;
if (!aa[i].visible)
{
continue;
}
-
height += aa[i].height;
if (y < height)
{
{
if (tooltip == null)
{
- tooltip = new Tooltip(ap.av.alignment.getAlignmentAnnotation()[row]
- .getDescription(true), this);
+ tooltip = new Tooltip(
+ ap.av.alignment.getAlignmentAnnotation()[row]
+ .getDescription(true),
+ this);
}
else
{
public void mousePressed(MouseEvent evt)
{
selectedRow = getSelectedRow(evt.getY() - scrollOffset);
-
AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
+ // DETECT RIGHT MOUSE BUTTON IN AWT
+ if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK)
+ {
+
+
PopupMenu popup = new PopupMenu("Annotations");
MenuItem item = new MenuItem(ADDNEW);
item.addActionListener(this);
popup.add(item);
+ if (selectedRow < 0)
+ {
+ // this never happens at moment: - see comment on JAL-563
+ if (hasHiddenRows)
+ {
+ item = new MenuItem(SHOWALL);
+ item.addActionListener(this);
+ popup.add(item);
+ }
+ this.add(popup);
+ popup.show(this, evt.getX(), evt.getY());
+ return;
+ }
+ // add the rest if there are actually rows to show
item = new MenuItem(EDITNAME);
item.addActionListener(this);
popup.add(item);
item = new MenuItem(HIDE);
item.addActionListener(this);
popup.add(item);
- item = new MenuItem(SHOWALL);
- item.addActionListener(this);
- popup.add(item);
+ if (hasHiddenRows)
+ {
+ item = new MenuItem(SHOWALL);
+ item.addActionListener(this);
+ popup.add(item);
+ }
this.add(popup);
item = new MenuItem(OUTPUT_TEXT);
item.addActionListener(this);
}
popup.show(this, evt.getX(), evt.getY());
+ } else {
+ // selection action.
+ if (selectedRow > -1 && selectedRow < aa.length)
+ {
+ if (aa[selectedRow].groupRef != null)
+ {
+ if (evt.getClickCount() >= 2)
+ {
+ // todo: make the ap scroll to the selection - not necessary, first click highlights/scrolls, second selects
+ ap.seqPanel.ap.idPanel.highlightSearchResults(null);
+ ap.av.setSelectionGroup(// new SequenceGroup(
+ aa[selectedRow].groupRef); // );
+ ap.av.sendSelection();
+ ap.paintAlignment(false);
+ PaintRefresher.Refresh(ap, ap.av.getSequenceSetId());
+ }
+ else
+ {
+ ap.seqPanel.ap.idPanel
+ .highlightSearchResults(aa[selectedRow].groupRef
+ .getSequences(null));
+ }
+ return;
+ }
+ else if (aa[selectedRow].sequenceRef != null)
+ {
+ Vector sr = new Vector();
+ sr.addElement(aa[selectedRow].sequenceRef);
+ if (evt.getClickCount() == 1)
+ {
+ ap.seqPanel.ap.idPanel.highlightSearchResults(sr);
+ }
+ else if (evt.getClickCount() >= 2)
+ {
+ ap.seqPanel.ap.idPanel.highlightSearchResults(null);
+ SequenceGroup sg = new SequenceGroup();
+ sg.addSequence(aa[selectedRow].sequenceRef, false);
+ ap.av.setSelectionGroup(sg);
+ ap.paintAlignment(false);
+ PaintRefresher.Refresh(ap, ap.av.getSequenceSetId());
+ ap.av.sendSelection();
+ }
+
+ }
+ }
+ }
}
/**
* DOCUMENT ME!
*
* @param e
- * DOCUMENT ME!
+ * DOCUMENT ME!
*/
protected void copy_annotseqtoclipboard(SequenceI sq)
{
g.setColor(Color.black);
AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
- int y = g.getFont().getSize();
- int x = 0;
+ int y = 0, fy = g.getFont().getSize();
+ int x = 0, offset;
if (aa != null)
{
+ hasHiddenRows = false;
for (int i = 0; i < aa.length; i++)
{
if (!aa[i].visible)
{
+ hasHiddenRows = true;
continue;
}
x = width - fm.stringWidth(aa[i].label) - 3;
- if (aa[i].graph > 0)
- {
- y += (aa[i].height / 3);
- }
-
- g.drawString(aa[i].label, x, y);
+ y += aa[i].height;
+ offset = -(aa[i].height - fy) / 2;
- if (aa[i].graph > 0)
- {
- y += (2 * aa[i].height / 3);
- }
- else
- {
- y += aa[i].height;
- }
+ g.drawString(aa[i].label, x, y + offset);
}
}
}