2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.appletgui;
23 import jalview.util.MessageManager;
24 import jalview.util.Platform;
25 import jalview.viewmodel.OverviewDimensions;
26 import jalview.viewmodel.OverviewDimensionsAllVisible;
27 import jalview.viewmodel.OverviewDimensionsWithHidden;
29 import java.awt.BorderLayout;
30 import java.awt.Dimension;
31 import java.awt.Panel;
32 import java.awt.event.ActionEvent;
33 import java.awt.event.ActionListener;
34 import java.awt.event.ComponentAdapter;
35 import java.awt.event.ComponentEvent;
36 import java.awt.event.MouseEvent;
37 import java.awt.event.MouseListener;
38 import java.awt.event.MouseMotionListener;
40 import javax.swing.JMenuItem;
41 import javax.swing.JPopupMenu;
42 import javax.swing.SwingUtilities;
44 public class OverviewPanel extends Panel implements Runnable,
45 MouseMotionListener, MouseListener
47 private OverviewDimensions od;
49 private OverviewCanvas oviewCanvas;
51 private AlignViewport av;
53 private AlignmentPanel ap;
55 private boolean showHidden = true;
57 private boolean updateRunning = false;
59 public OverviewPanel(AlignmentPanel alPanel)
65 od = new OverviewDimensionsWithHidden(av.getRanges(),
66 (av.isShowAnnotation() && av.getSequenceConsensusHash() != null));
68 oviewCanvas = new OverviewCanvas(od, av);
69 setLayout(new BorderLayout());
70 add(oviewCanvas, BorderLayout.CENTER);
72 setSize(new Dimension(od.getWidth(), od.getHeight()));
73 addComponentListener(new ComponentAdapter()
77 public void componentResized(ComponentEvent evt)
79 if ((getWidth() != od.getWidth())
80 || (getHeight() != (od.getHeight())))
82 updateOverviewImage();
87 addMouseMotionListener(this);
89 addMouseListener(this);
91 updateOverviewImage();
96 public void mouseEntered(MouseEvent evt)
101 public void mouseExited(MouseEvent evt)
106 public void mouseClicked(MouseEvent evt)
108 if (SwingUtilities.isRightMouseButton(evt))
115 public void mouseMoved(MouseEvent evt)
120 public void mousePressed(MouseEvent evt)
126 public void mouseReleased(MouseEvent evt)
132 public void mouseDragged(MouseEvent evt)
137 private void mouseAction(MouseEvent evt)
139 if (SwingUtilities.isRightMouseButton(evt))
141 if (!Platform.isAMac())
148 od.updateViewportFromMouse(evt.getX(), evt.getY(), av.getAlignment()
149 .getHiddenSequences(), av.getAlignment().getHiddenColumns());
150 ap.setScrollValues(od.getScrollCol(), od.getScrollRow());
151 ap.paintAlignment(false);
156 * Updates the overview image when the related alignment panel is updated
158 public void updateOverviewImage()
160 if ((getSize().width > 0) && (getSize().height > 0))
162 od.setWidth(getSize().width);
163 od.setHeight(getSize().height);
165 setSize(new Dimension(od.getWidth(), od.getHeight()));
171 oviewCanvas.restartDraw();
175 updateRunning = true;
177 Thread thread = new Thread(this);
180 updateRunning = false;
186 oviewCanvas.draw(av.isShowSequenceFeatures(),
187 (av.isShowAnnotation() && av
188 .getAlignmentConservationAnnotation() != null),
189 ap.seqPanel.seqCanvas.getFeatureRenderer());
194 * Update the overview panel box when the associated alignment panel is
198 public void setBoxPosition()
200 od.setBoxPosition(av.getAlignment()
201 .getHiddenSequences(), av
202 .getAlignment().getHiddenColumns());
207 * Displays the popup menu and acts on user input
209 private void showPopupMenu(MouseEvent e)
211 JPopupMenu popup = new JPopupMenu();
212 ActionListener menuListener = new ActionListener()
215 public void actionPerformed(ActionEvent event)
217 // switch on/off the hidden columns view
218 toggleHiddenColumns();
221 JMenuItem item = new JMenuItem(
222 MessageManager.getString("label.togglehidden"));
224 item.addActionListener(menuListener);
225 popup.show(this, e.getX(), e.getY());
229 * Toggle overview display between showing hidden columns and hiding hidden columns
231 private void toggleHiddenColumns()
236 od = new OverviewDimensionsAllVisible(av.getRanges(),
237 (av.isShowAnnotation() && av
238 .getAlignmentConservationAnnotation() != null));
243 od = new OverviewDimensionsWithHidden(av.getRanges(),
244 (av.isShowAnnotation() && av
245 .getAlignmentConservationAnnotation() != null));
247 oviewCanvas.resetOviewDims(od);
248 updateOverviewImage();